Regex 修改sed命令以捕获子字符串

Regex 修改sed命令以捕获子字符串,regex,bash,sed,grep,Regex,Bash,Sed,Grep,我有一个例子: "are "insulin sensitizers" " 我试图使用下面的命令查找xml quote命令,并将其替换为单引号,但它仅适用于第一个引号,而“敏化器”后面的第二个引号保持不变 命令: grep -rl """ ./ | xargs sed -i "s/"/'/" 结果: "are 'insulin sensitizers" " 预期结果: "are 'insulin se

我有一个例子:

"are "insulin sensitizers" "
我试图使用下面的命令查找xml quote命令,并将其替换为单引号,但它仅适用于第一个引号,而“敏化器”后面的第二个引号保持不变

命令:

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

"are 'insulin sensitizers" "
预期结果:

"are 'insulin sensitizers' "

您需要使用
sed
中的
g
标志进行全局替换:

grep -Zirl """ . | xargs -0 sed -i "s/"/'/g"
还要注意使用
grep
中的
-Z
选项和
xargs
中的
-0
来处理具有特殊字符和空格的文件

根据man grep:

-Z
-null

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


sed-i“s/”/“/”/g“
(全球)可能的重复。有趣的是,问题以“如何在不使用神秘正则表达式的情况下实现这一点?”结尾。神秘正则表达式可能是一个伟大的超级恶棍,@anubhava如果您愿意将您的评论作为答案,我很乐意接受,因为它解决了我的问题。