我的文件中有一个包含换行符的模式:
client_encryption_options:
enabled: false
我想设置enabled
为true
.但enabled
一定是下面这个
client_encryption_options
。
grep 不允许我搜索多行。我怎样才能实现这个目标?
答案1
好吧,grep
也不允许您进行修改,因此该实用程序从一开始就无法实现。
使用 GNUsed
代替:
$ sed '/^client_encryption_options:/,+1s/enabled:.*/enabled: true/' file
这将找到以字符串开头的行client_encryption_options:
,并对它和下一行应用替换。替换会将enabled:
同一行中的字符串及其后面的所有内容替换为enabled: true
。
替换将应用于两行,但由于enabled:.*
在第一行上找不到该模式,因此它将保持不变。第二行将无条件更改(无论后面的文本如何enabled:
)。
答案2
和sed
:
sed '/client_encryption_options:/{n;s/false/true/;}'
n
是获取的命令下一个行进入模式空间(在打印并丢弃当前模式空间内容之后),s
是代替。