2012-02-16 64 views
0

我正在使用sed -e "s/foo/$bar/" -e "s/some/$text/" file.whatever替換某個文件中的短語。問題是$ bar字符串包含多個特殊字符,如/。所以,當我嘗試更換使用下面的代碼的文本文件的東西...用包含特殊字符的字符串替換文件中的短語

#!/bin/bash 

bar="http://stackoverflow.com/" 

sed -e "s/foo/$bar/" -e "s/some/$text/ file.whatever 

...然後我得到一個錯誤說:sed: unknown option to s有什麼我能做些什麼呢?

回答

2

您可以使用任何分隔符。例如,[email protected]@[email protected]。另一個好的分隔符是垂直條。其他字符可以工作,但對於某些情況(如正則表達式)具有特殊意義。

+0

只是雞蛋裏挑骨頭,''^是一個正則表達式元字符,所以你會更好選擇像'|'或'@' – 2012-02-16 19:32:08

+0

同意,修改原來的那些(像我)誰可能只讀到目前爲止... – 2012-02-16 19:58:01

0

無論你使用什麼分隔符,你都可以在sed中獲得這個難度,特別是如果你不知道字符串包含什麼。我會選擇一種將shell變量傳遞給helper解釋器的方法。

awk -v rep1="$bar" -v rep2="$text" '{sub(/foo/, rep1); sub(/some/, rep2); print}' 

perl -spe 's/foo/$rep1/; s/some/$rep2/' -- -rep1="$bar" -rep2="$text" 

正確性勝過簡潔起見在此情況下。
reference for Perl example

相關問題