夥計們,替換反斜槓前綴
我一直在試圖讓一個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
你需要所有的'\\'來減少到'\',還是隻有那些後面跟着雙引號? –