我使用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
我能做些什么吗?
答案 0 :(得分:2)
您可以使用任何分隔符。例如s@some@SOME@
。另一个好的分隔符是垂直条。其他字符可以工作,但对于某些上下文(如正则表达式)具有特殊意义。
答案 1 :(得分:0)
无论你使用什么分隔符,你都可以在sed中遇到这个困难,特别是如果你不知道字符串包含什么。我会选择一种不同的方法将shell变量传递给辅助解释器。
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)