Awk
匹配一個模式並替換它後面的第一個字元串實例
我正在編寫一個配置文件的修改腳本,如下所示:
[purple] auth = no enabled = 0 username = password = priority = 0 host = True [shovel] group = manual = False enabled = 0 username =
哪裡有很多
$$ categories $$有時使用鍵/值對的相同鍵。 是否可以使用 awk/sed/grep/tr/cut/perl 製作一個單線,可以將“啟用 = 0”的值更改為“啟用 = 1”,但僅適用於類別
$$ shovel $$?
您可以使用一個範圍(停在類別
sed
末尾的空行上):[shovel]
sed '/\[shovel\]/,/^$/ s/enabled = 0/enabled = 1/' file
第一部分
/\[shovel\]/,/^$/
意味著找到一行,直到找到一個空行,然後僅在該部分[shovel]
執行以下命令(在本例中為簡單)s/old/new``file
回應評論時注意:
sed
將不接受範圍和地址中的替代分隔符(因此/
,如果您需要匹配它們,請轉義任何必須是文字的字元),除非它們前面有反斜杠。您始終可以在以下任何命令中使用替代分隔符,例如:sed '/\[shovel\]/,/^$/ s|enabled = 0|enabled = 1|' file
或者
sed '\|\[shovel\]|, |^$| s|enabled = 0|enabled = 1|' file