2016-11-30 223 views
1

我想在一個文件'取代的\'每一個參考查找和替換:」

我使用的變化:sed -e s/\'/"\'"/g file.txt

但他們隨時更換every.single(單)。報價

任何幫助將不勝感激。

+0

你想在替換中雙引號,如在「'」? –

+0

雙引號是我試圖讓它顯示'逐字(作爲一個字符串,而不是解析爲正則表達式)。我想他們可能不需要。 – Corey

+1

啊,好吧。在你的版本中,他們不會出現,但如果你單引用整個命令,他們會。 –

回答

1

不知道這是最好的解決辦法,我能做到這一點是這樣的:

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

(投入字符範圍反斜槓字符,因此不會與下面的報價干擾,並用雙引號保護)

或者只是伸出你的語法,沒有引號,但使用幾乎同樣的伎倆:

sed -e s/[\\]\'/"\'"/g file.txt 
+0

這似乎完成了工作,謝謝!!!!! – Corey

+0

那些單引號是地獄! –

+0

是的 - 當談到命令行時,我還是一個小菜鳥:P再次感謝您的幫助! – Corey

1

的方法試圖以節省儘可能多的「單quotednes的的」 sed命令成爲可能:

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

只是逃避\\\並得到一個單引號到命令'"'"':第一單引號結束命令爲止,然後我們有一個雙引號單報價("'"),最後是對命令其餘部分的單引號。

另外,雙引號引起整個命令和逃避都反斜槓和單引號:

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

很高興知道,我曾嘗試過諸如'\\\''嘗試讓它逃跑的事情(考慮到它會避免反斜槓和單引號,但它不起作用,謝謝你的洞察! – Corey

+0

@Corey它實際上適用於我'sed「s/\\\'/ \ '/g」',我會補充說。 –

+0

奇怪 - 我發誓我試過了,但它沒有奏效。 #sednoob – Corey

1

正確的語法是:

$ echo "foo'bar" | sed 's/'\''/\'/' 
foo'bar 

每個腳本(SED,AWK,等等)應始終用單引號引起來,你只需要用其他單引號就可以停止/重新啓動腳本分隔符,這個腳本的最小部分是絕對必要的,在這種情況下,可以使用\'。你需要打開shell來指定',因爲每個shell規則中沒有包含在'中的腳本可以包含',即使你試圖逃避它。

0
echo "foo'bar" | gawk '{gsub(/\47/,"\\'")}1' 

foo'bar 

這裏棘手的部分是用&符號替換單引號。 首先,爲了使單引號可管理,在這裏使用八進制 代碼\ 47,然後用兩個反斜槓轉義&符號。突然 它變得可行:)

+0

雖然這段代碼可能會解決這個問題,但[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的質量請記住,您將來會爲讀者回答問題,這些人可能不知道您的代碼建議的原因,也請儘量不要使用解釋性註釋來壓縮代碼,這會降低代碼和可讀性的可讀性解釋! – kayess