2010-02-13 57 views
4

我試圖替換\」使用SED(反斜槓doouble報價)方式「(引號)。替換的sed在Mac OS X Leopard中沒有做什麼預期

sed "s/\\\"/\'/g" file.txt 

該命令不正常工作。它代替了所有的「在文本文件中,不僅\」。

它做同樣的事情sed的「S/\」/\「/ g的」 file.txt的

我正在使用Mac OS X Leopard。

有沒有人有線索?

+2

如果有疑問,請添加另一個反斜槓。 – 2010-02-13 16:56:19

回答

7

你正在處理臭名昭着的shell引用問題。嘗試在s // g周圍使用單引號,或者添加一個額外的轉義:

sed "s/\\\\\"/\'/g" 
+0

額外的逃生工作!謝謝保羅。 – jlfenaux 2010-02-13 17:09:06

+0

我不認爲這正是shell引用問題,因爲問題在於sed對字符串的解釋而不是shell的解釋。 Sed看到s/\「/ \'/ g並且解釋爲」相同「 – 2010-02-13 17:33:00

+1

@William - 我將其描述爲」shell引用問題「,因爲bash」吞下「其中一個逃脫,所以sed看不到 – 2010-02-13 17:50:00

2

引用bash的問題很有趣。

$ cat input 
"This is an \"input file\" that has quoting issues." 
$ sed -e 's/\\"/'"'"'/g' input 
"This is an 'input file' that has quoting issues."

注意,有對接在一起三根弦,使sed腳本:

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

的第一個和最後的報價單引號,中間用雙引號引用。

馬修的命令是通過連接兩個字符串,而不是三個:

  • s/\\"/
  • '/g

其中第一個是單引號和第二雙引號。

+1

不錯,你可以稍微簡化爲sed -e's/\\「/'」'/ g「輸入 – 2010-02-13 17:06:08

0

不必使用太多的引號。 \ 042八進制爲"和\ 047爲八進制單引號

awk '{gsub("\042","\047") }{print}' file 
相關問題