替换以反斜杠为前缀的单引号和双引号

时间:2017-06-20 09:44:33

标签: unix awk sed

民间,

我一直在尝试获取一个sed命令,该命令会将\'替换为'并将\\"替换为文件中的\"。我使用sed尝试了以下内容,但我无法弄清楚如何隔离单引号和双引号。

$ cat temp
\'
\\"

$ cat temp | sed 's#\\\\"#\\"#' | sed 's#\\'#'#'
'
"

期望的输出是

'
\"

有人可以指出我做错了什么。

注意:我想将此更改应用于文件

中的所有匹配项

5 个答案:

答案 0 :(得分:2)

awk 解决方案:

awk '{ gsub(/\\\047/,"\047",$0); gsub(/\\\\\042/,"\\\042",$0) }1' temp

输出:

'
\"

答案 1 :(得分:1)

任何UNIX框上的任何sed:

$ sed 's/\\'\''/'\''/g; s/\\\\"/\\"/g' file
'
\"

使用-E启用ERE的GNU或OSX sed:

$ sed -E 's/\\('\''|\\")/\1/g' file
'
\"

答案 2 :(得分:0)

使用GNU sed 4.2.2测试,不确定可移植性
我修改了输入样本以更好地显示命令的工作:

$ cat temp 
\' and \\' and \\\'
\" and \\" and \\\"

$ sed -E 's/\\([\x27"])/\1/g' temp 
' and \' and \\'
" and \" and \\"
  • -E使用ERE,有些sed版本使用-r
  • \\([\x27"])将匹配\后跟'"并且仅捕获引号字符
  • \1捕获的组用作替换
  • g修饰符将替换行
  • 中的所有此类实例

仅更改\\"而不更改任何\"

$ sed -E 's/\\\x27/\x27/g; s/\\\\"/\\"/g;' temp 
' and \' and \\'
\" and \" and \\"

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/\\\(\\['\''"]\)/\1/g' file

或:

sed -r 's/\\(\\['\'"])/\1/g' file

问题是单引号用于引用sed表达式,因此需要在shell中引用\'。使用单引号或双引号的字符类允许替换使用后引用,从而简化替换的右边。

答案 4 :(得分:-2)

您遇到的一个困难是您将表达式编写为sed的命令行参数,因此需要为shell引用它。如果你在一个文件中编写你的sed程序会容易得多:

#!/bin/sed -f

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

你需要将每个\加倍,以便将它们引用到s命令,但是没有额外引用shell需要。

演示:

$ cat 44649501.input

\'
\\"

$ ./44649501.sed <44649501.input 

'
\"