Awk

匹配一個模式並替換它後面的第一個字元串實例

  • February 15, 2019

我正在編寫一個配置文件的修改腳本,如下所示:

[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

引用自:https://unix.stackexchange.com/questions/340459