如何在bash中替换反斜杠和单引号模式?

时间:2015-02-27 12:47:15

标签: string bash unix sed

我想用\\\\'

替换以下模式\'

所以像这样的文字:

ABC DEF \\\'S XYZ

会变成:

ABC DEF \'S XYZ

我尝试过使用sed

sed "s/\\\\\\\\\'/\\\\\'/g"

但它并没有取代任何东西。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

根据使用单引号或双引号,有不同的方法:

$ cat a
hello \\\\' aaa
afa

单引号 - 需要关闭并再次打开以插入单引号:

$ sed 's#\\\\\\\\'"'"'#X'"'"'#g' a
hello X' aaa
afa

双引号 - 每个\需要转义三次:

$ sed "s#\\\\\\\\\\\\\\\'#\\\'#g" a
hello \' aaa
afa

好读:Remove backslashes from a text file

  
      
  1. 在shell (如bash)中,您可以通过反斜杠转义反斜杠。因此,而不是\\\。将字符串括在double之间   引号"使反斜杠行为更多   复杂<1>但仍会产生双反斜杠   一个反斜杠。将字符串括在单引号'之间   除了'之外,每个字符都按字面意思处理。
  2.   

答案 1 :(得分:1)

试试这个:

echo "ABC DEF \\\'S XYZ" | sed -r 's/\\+/\\/g'

输出:ABC DEF \'S XYZ

这里-r的{​​{1}}切换用于扩展正则表达式。 sed会在整个行中匹配一次或多次sed\),并将匹配项替换为\\+\)。

答案 2 :(得分:0)

这个有效:

echo ABC DEF \\\'S XYZ | sed -r 's/(.*)\\\\\\(.*)/\1 \\\2/g'