使用sed, geed, find和xargs转义单引号和双引号。

3

我有一个类似于这个命令的命令:

find ./ -type f | xargs gsed -i -r 's/[$][A-Za-z_\'"]/testing

我想运行这个命令,但是单引号和双引号破坏了它。我该如何转义这些字符串并使该命令工作?
这与此问题不同一个问题,因为我在[中有一个单引号。但如果稍作修改就能解决问题,我想知道。
我尝试过@、#、\等多种方式,但还没有成功。
3个回答

6

请看这个:

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部分是否正确,只是针对单引号/双引号部分。


这对我没有用(没有错误,但是没有替换任何内容)。我使用的是Mac电脑。 - rrr
1
@rrr,你使用的是BSD版的sed。它没有-i选项。请查看手册以获取原地替换的方法。 - Kent

1

在单引号中不能使用单引号。你可以:

  1. 结束单引号,然后使用反斜杠引用: '...'\'

  2. 结束单引号,然后在双引号中使用单引号: '...'"'"


  1. 使用与替换内容不同的引号类型来包装表达式(例如,在双引号中使用单引号)。如果您使用双引号进行包装:sed "s/'/bla/",则单引号 ' 将被替换为 bla,无需转义。(我在 Mac 上)
- rrr
@rrr:双引号可能需要添加更多的反斜杠,因为它们可能会开始扩展一些子字符串。 - choroba

0

或者您可以尝试将sed脚本放在双引号中,并转义需要转义的内容

gsed -i -r "s/[$][A-Za-z_'\"]/testing/" 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接