用包含特殊字符的字符串替换文件中的短语

时间:2012-02-16 17:43:09

标签: string shell unix sed

我使用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 个答案:

答案 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