民间,
我一直在尝试获取一个sed命令,该命令会将\'
替换为'
并将\\"
替换为文件中的\"
。我使用sed
尝试了以下内容,但我无法弄清楚如何隔离单引号和双引号。
$ cat temp
\'
\\"
$ cat temp | sed 's#\\\\"#\\"#' | sed 's#\\'#'#'
'
"
期望的输出是
'
\"
有人可以指出我做错了什么。
注意:我想将此更改应用于文件
中的所有匹配项答案 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
'
\"