Sed
無法使用組和多行使用 sed 更改配置文件
我正在嘗試在配置文件 (
/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
) 中編寫腳本更改,歸結為:[Update already installed software] Identity=unix-group:admin;unix-group:sudo Action=org.debian.apt.upgrade-packages ResultActive=yes [Printer administration] Identity=unix-group:lpadmin;unix-group:admin;unix-group:sudo Action=org.opensuse.cupspkhelper.mechanism.* ResultActive=yes [Disable hibernate by default in upower] Identity=unix-user:* Action=org.freedesktop.upower.hibernate ResultActive=no
我正在嘗試
ResultActive=yes
為所有以[Disable hibernate
. 使用 sed 和正則表達式組我想出了:
sed -i 's/\(Disable hibernate.*\n.*\n.*\nResultActive\=\)no/\1yes/' /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
但是,這不會更改文件。根據regexr,正則表達式匹配,但檢查sed.js.org, sed 不會改變任何事情。
如何修復我的
sed
命令,以更改休眠配置塊的相應行?**編輯:**似乎我無法讓
sed
帶有換行符的組根本不起作用。
Sed 預設是基於行的 - 要進行多行匹配,您需要顯式地將行添加到模式空間(
N
例如使用命令)。相反,你可以做這樣的事情,它仍然是基於行的,但向前載入感興趣的行:
$ sed '/^\[Disable hibernate/{n;n;n;/^ResultActive/s/=no/=yes/;}' file.pkla [Update already installed software] Identity=unix-group:admin;unix-group:sudo Action=org.debian.apt.upgrade-packages ResultActive=yes [Printer administration] Identity=unix-group:lpadmin;unix-group:admin;unix-group:sudo Action=org.opensuse.cupspkhelper.mechanism.* ResultActive=yes [Disable hibernate by default in upower] Identity=unix-user:* Action=org.freedesktop.upower.hibernate ResultActive=yes
請注意,就像您的原件一樣,這僅在可以依賴塊中的行順序時才有效。