2017-06-20 138 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年的編程經驗:-)。 –