我有一个文件。
$ cat file
"bar": false
"foo": false
我需要在模式中用 onlyfalse
替换单词。问题在于引号和空格。true
"foo": false
我想到了两个办法:
- 用某种引号/双引号隔离整个模式。
- 仅替换前面有“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
修改原文件的选项。