2015-08-18 77 views
1

我試圖查找和替換的我怎樣才能逃避/在我的sed命令「

<a href="#" data-role="button" data-inline="true" data-rel="back">Cancel</a> 

每發生:

<a data-role="button" data-inline="true" onclick="$(this).closest('[data-role=popup]').popup('close');">Cancel</a> 

所以我用sed爲此,問題是,在我的搜索和替換字符串中包含/和「我不知道我是否應該逃避它們,否則我不會收到錯誤。有什麼建議麼?

find . -type f -print0 | xargs -0 sed -i 's/<a href="#" data-role="button" data-inline="true" data-rel="back">Cancel</a>/<a data-role="button" data-inline="true" onclick="$(this).closest('[data-role=popup]').popup('close');">Cancel</a>/g' 
+0

可能重複[?如何逃脫單引號字符串中的單引號(http://stackoverflow.com/questions/1250079/how-to-單引號內的單引號字符串) – kenorb

+1

請參閱https://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliably-with-sed關於如何可靠地轉義任何給定的字符串以便在'sed'中使用。雖然這只是處理'/'和單引號的矯枉過正。 –

回答

0

在SE網絡站點這個答案可能會有所幫助:https://unix.stackexchange.com/questions/32907/what-characters-do-i-need-to-escape-when-using-sed-in-a-sh-script

從本質上講,它說:

你需要前一個反斜槓/如果它出現在正則表達式。

我發現的其他資源也證實了這一點,所以我會試試看。

答案沒有提及任何有關雙引號的內容,並且從我在其他地方發現的內容來看,這些在sed中似乎不是問題,因此不用擔心會漏掉這些內容。

+0

然後我做了這個:'find。 -type f -print0 | xargs -0 sed -i's/取消<\/a>/取消<\/a>/g''但是什麼也沒有 – VaTo

+0

你試過原始代碼沒有逃脫?另外,你會得到什麼樣的錯誤? –

1

您不必使用斜槓作爲sed分隔符。它將使用's'之後的任何字符。使其不在數據中,您不必擔心數據中出現斜線。不要擔心雙引號:

$ cat x 
gand"alf  :0   2015-05-19 14:47 (:0) 
gandalf  pts/1  2015-05-27 09:49 (:0) 
$ sed 's!pts/1!efs/1!g' x 
gand"alf  :0   2015-05-19 14:47 (:0) 
gandalf  efs/1  2015-05-27 09:49 (:0) 
$ sed 's!gand"alf!efs/1!g' x 
efs/1  :0   2015-05-19 14:47 (:0) 
gandalf  pts/1  2015-05-27 09:49 (:0) 
$