首页 > 解决方案 > 修改 sed 命令以捕获子字符串

问题描述

我有示例文本:

"are "insulin sensitizers" "

我正在尝试使用以下命令查找并用单引号替换 xml 引用命令,但它仅适用于第一个,而“致敏剂”之后的第二个保持不变。

命令:

grep -rl """ ./ | xargs sed -i "s/"/'/" 

结果:

"are 'insulin sensitizers" "

期望的结果:

"are 'insulin sensitizers' "

标签: regexbashsedgrep

解决方案


您将需要使用gflag insed进行全局替换:

grep -Zirl """ . | xargs -0 sed -i "s/"/'/g"

还要注意使用-Z选项 ingrep-0inxargs来处理带有特殊字符和空格的文件。

根据man grep

-Z,--null

输出一个零字节(ASCII NUL 字符)而不是通常跟在文件名后面的字符。


推荐阅读