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如果您愿意将您的评论作为答案,我很乐意接受,因为它解决了我的问题。