用多行模式替换文本

用多行模式替换文本

我的文件中有一个包含换行符的模式:

client_encryption_options:
    enabled: false

我想设置enabledtrue.但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代替

相关内容