2012-12-24 108 views
2

我應該如何使用'sed'命令來查找和替換給定的單詞/單詞/句子而不考慮它們中的任何一個作爲特殊字符?Windows SED命令 - 簡單的搜索和替換無需正則表達式

換句話說,熱處理查找和替換參數爲純文本。

在下面的例子中,我想用「+薩加爾」然後更換「薩格爾」我得給下面的命令

sed "s/sagar/\\[email protected]" 

我知道\應該與其他\進行轉義,但我做不到這個操縱。 由於有這麼多特殊字符和theie組合。

我將從用戶屏幕上查找並替換參數作爲輸入。 我想從c#代碼執行sed。

簡單地說,我不想使用sed的正則表達式。我想我的命令文本被視爲純文本?

這可能嗎? 如果是的話我該怎麼辦?

回答

1

儘管可能有sed版本有類似--noregex_matching的選項,但其中大多數版本沒有該選項。因爲您通過提示用戶來獲取搜索並替換輸入,所以最好是掃描用戶輸入字符串以獲取reg-exp特殊字符,並根據需要將其轉義。

此外,您的用戶期望例如,他們的全部大寫搜索輸入正確匹配並替換較低或混合的大小寫字符串?在這種情況下,請記住,您可以將其目標字符串重寫爲[Ss][Aa][Gg][Aa][Rr],並替換爲+Sagar

請注意,替換端使用的正則表達式字符數少得多,'&'表示「匹配的完整字符串」,然後是編號替換組,如\1,\2,...。鑑於沒有知識或期望他們可以使用此類角色的用戶,他們使用的可能性是\1,他們所需的替代品相當低。更有可能他們可能對&有效,所以您必須至少掃描一次,並用\&替換。在一個基本的sed中,就是這樣。 (最新的GNU seds中可能有其他人,或者與PC工具相關的一些sed)。

對於替換字符串,您根本不必轉義+字符。可能是對於\。再次,您可以掃描用戶的「天真」輸入,並根據需要添加轉義字符。

最後,如果你正在做一個將要分發的「包」,並且你將依賴sed的用戶版本,請注意有很多版本的sed浮動,在Unix/Linux中的基礎,以及其他,特別是super-sed,(我很確定)開始作爲PC獨立器,並具有非常不同的功能集。 IHD。

IHTH。