伙计们,替换反斜杠前缀
我一直在试图让一个sed命令将在一个文件替换\'
到'
和\\"
到\"
单引号和双引号。我尝试了下面的使用sed
,但我无法弄清楚如何分隔单引号和双引号。
$ cat temp
\'
\\"
$ cat temp | sed 's#\\\\"#\\"#' | sed 's#\\'#'#'
'
"
所需的输出是
'
\"
有人能指出我在做什么错。
注:我想在文件中这一变化适用于所有发生
伙计们,替换反斜杠前缀
我一直在试图让一个sed命令将在一个文件替换\'
到'
和\\"
到\"
单引号和双引号。我尝试了下面的使用sed
,但我无法弄清楚如何分隔单引号和双引号。
$ cat temp
\'
\\"
$ cat temp | sed 's#\\\\"#\\"#' | sed 's#\\'#'#'
'
"
所需的输出是
'
\"
有人能指出我在做什么错。
注:我想在文件中这一变化适用于所有发生
AWK解决方案:
awk '{ gsub(/\\\047/,"\047",$0); gsub(/\\\\\042/,"\\\042",$0) }1' temp
输出:
'
\"
看起来像这个工作。让我测试一下,然后我会接受这个答案! 。谢谢 – Garfield
在这种情况下,子作品也是如此。 –
测试与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
modi费里将取代所有这类事件排队只改变\\"
而不是\"
$ sed -E 's/\\\x27/\x27/g; s/\\\\"/\\"/g;' temp
' and \' and \\'
\" and \" and \\"
任何发生这可能会为你工作(GNU SED):
sed 's/\\\(\\['\''"]\)/\1/g' file
或:
sed -r 's/\\(\\['\'"])/\1/g' file
问题是单引号用于引用sed表达式,因此需要在shell中引用,因此\'
。对单引号或双引号使用字符类允许替换使用后引用,从而简化替换的右侧。
那些不会像OP想要的那样将'\''转换为'''。 –
您遇到的一个难题是您将表达式作为sed的命令行参数编写,因此需要为您的shell引用它。这是很容易,如果你在一个文件中写你的sed程序:
#!/bin/sed -f
s/\\'/'/g
s/\\\\"/\\"/g
,需要在每个\
翻一番,它们引用到s
命令,但没有多余的引用,该外壳将需要。
示范:
$ cat 44649501.input
\'
\\"
$ ./44649501.sed <44649501.input
'
\"
对于任何sed的任何UNIX系统中:
$ sed 's/\\'\''/'\''/g; s/\\\\"/\\"/g' file
'
\"
与GNU或OSX的sed的ERES与-E
启用:
$ sed -E 's/\\('\''|\\")/\1/g' file
'
\"
像往常一样伟大的解决方案。我想问你一个问题,如何成为像埃德有一天可能我可以成为像你这样的专家:) – RavinderSingh13
感谢Ravinder,所需要的是38年的编程经验:-)。 –
你不能用'” '这样的单引号里面..用'\ x27'代替。#sed's#\\\ x27#\ x27#'' – Sundeep
你需要所有的'\\'来减少到'\',还是只有那些后面跟着双引号? –