2012-02-16 136 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

相关问题