使用 sed 选择性地用引号替换字符串

使用 sed 选择性地用引号替换字符串

我有一个文件。

$ cat file
"bar":  false
"foo":  false

我需要在模式中用 onlyfalse替换单词。问题在于引号和空格。true"foo": false

我想到了两个办法:

  1. 用某种引号/双引号隔离整个模式。
  2. 仅替换前面有“foo”的“false”。

第二个选项的示例尝试:

$ sed -i 's/\(.*foo\)/false/true\1/g' file

失败了。

答案1

使用地址。如果你用单引号引用你的sed表达式,那么引号就不是问题

$ sed '/"foo"/ s/false/true/' file
"bar":  false
"foo":  true

如果你确实需要匹配整个模式,那么很好:

$ sed '/"foo": *false/ s/false/true/' file
"bar":  false
"foo":  true

*匹配任意数量的前导字符(空格)。

\s还可以使用它来匹配制表符(任何水平空格):

sed '/"foo":\s*false/ s/false/true/' file

测试后添加-i修改原文件的选项。

相关内容