我有一个类似于这个命令的命令:
find ./ -type f | xargs gsed -i -r 's/[$][A-Za-z_\'"]/testing
我想运行这个命令,但是单引号和双引号破坏了它。我该如何转义这些字符串并使该命令工作?
这与此问题不同一个问题,因为我在[中有一个单引号。但如果稍作修改就能解决问题,我想知道。
我尝试过@、#、\等多种方式,但还没有成功。
请看这个:
kent$ cat file
''''''
""""""
kent$ sed 's/\x27/single /g;s/\x22/double /g' file
single single single single single single
double double double double double double
因此,将您的cmd更改为:
find ./ -type f | xargs gsed -i -r 's/[$][A-Za-z_\x22\x27]/testing'
注意:我没有检查你的find/xargs部分是否正确,只是针对单引号/双引号部分。
在单引号中不能使用单引号。你可以:
结束单引号,然后使用反斜杠引用: '...'\'
结束单引号,然后在双引号中使用单引号: '...'"'"
sed "s/'/bla/"
,则单引号 '
将被替换为 bla
,无需转义。(我在 Mac 上)或者您可以尝试将sed脚本放在双引号中,并转义需要转义的内容
gsed -i -r "s/[$][A-Za-z_'\"]/testing/"
-i
选项。请查看手册以获取原地替换的方法。 - Kent