use*_*831 4 grep sed awk perl regular-expression
我正在编写一个配置文件的修改脚本,如下所示:
[purple]
auth = no
enabled = 0
username =
password =
priority = 0
host = True
[shovel]
group =
manual = False
enabled = 0
username =
Run Code Online (Sandbox Code Playgroud)
有许多 [类别] 并且有时具有键/值对的相同键的地方。
是否可以使用 awk/sed/grep/tr/cut/perl 制作一个单线,它可以将“enabled = 0”的值更改为“enabled = 1”,但仅适用于类别 [shovel]?
在sed
您可以使用范围(停止在[shovel]
类别末尾的空行):
sed '/\[shovel\]/,/^$/ s/enabled = 0/enabled = 1/' file
Run Code Online (Sandbox Code Playgroud)
第一部分/\[shovel\]/,/^$/
意味着找到一行[shovel]
,继续直到找到一个空行,然后s/old/new
只在该部分执行以下命令(在这种情况下是一个简单的)file
请注意回复评论:sed
不会接受范围和地址中的替代分隔符(因此/
,如果您需要匹配它们,则转义任何必须是文字的字符),除非它们前面有反斜杠。您始终可以在以下任何命令中使用备用分隔符,例如:
sed '/\[shovel\]/,/^$/ s|enabled = 0|enabled = 1|' file
Run Code Online (Sandbox Code Playgroud)
或者
sed '\|\[shovel\]|, |^$| s|enabled = 0|enabled = 1|' file
Run Code Online (Sandbox Code Playgroud)