sed - 変数を使用してファイルの複雑な行を置き換える

sed - 変数を使用してファイルの複雑な行を置き換える

sedを使用してファイルの複雑な行を置き換える方法は?

たとえば、/etc/udev/rules.d/70-pertant-net.rulesでudevルールを変更したいとします。

これはうまくいきません:

OLD_RULE='SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:36:4c:e5", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"'

NEW_RULE='SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:36:4c:e5", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"'


sed -i "s/$OLD_RULE/$NEW_RULE/g" /etc/udev/rules.d/70-persistent-net.rules

ファイルは変更されていません。

ベストアンサー1

パターンマジック文字として解釈できるOLD_RULEのすべての文字をエスケープする必要があります。あるいは、より簡単には、作業したい行に一致するパターンを使用し、実際に必要な最小限の交換のみを実行します。

たぶん同様のものかもしれません(テストされていません)sed -i '/, NAME="eth1"/s/eth1/eth0/' /etc/udev/rules.d/70-persistent-net.rules

おすすめ記事