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
。