2017-06-20 215 views
3

伙计们,替换反斜杠前缀

我一直在试图让一个sed命令将在一个文件替换\''\\"\"单引号和双引号。我尝试了下面的使用sed,但我无法弄清楚如何分隔单引号和双引号。

$ cat temp 
\' 
\\" 

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

所需的输出是

' 
\" 

有人能指出我在做什么错。

注:我想在文件中这一变化适用于所有发生

+0

你不能用'” '这样的单引号里面..用'\ x27'代替。#sed's#\\\ x27#\ x27#'' – Sundeep

+0

你需要所有的'\\'来减少到'\',还是只有那些后面跟着双引号? –

回答

2

AWK解决方案:

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

输出:

' 
\" 
+0

看起来像这个工作。让我测试一下,然后我会接受这个答案! 。谢谢 – Garfield

+0

在这种情况下,子作品也是如此。 –

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 modi费里将取代所有这类事件排队

只改变\\"而不是\"

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

任何发生这可能会为你工作(GNU SED):

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

或:

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

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

+0

那些不会像OP想要的那样将'\''转换为'''。 –

-2

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

#!/bin/sed -f 

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

,需要在每个\翻一番,它们引用到s命令,但没有多余的引用,该外壳将需要。

示范:

$ cat 44649501.input 

\' 
\\" 

$ ./44649501.sed <44649501.input 

' 
\" 
1

对于任何sed的任何UNIX系统中:

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

与GNU或OSX的sed的ERES与-E启用:

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

像往常一样伟大的解决方案。我想问你一个问题,如何成为像埃德有一天可能我可以成为像你这样的专家:) – RavinderSingh13

+1

感谢Ravinder,所需要的是38年的编程经验:-)。 –