64

我正在尝试通过 OS X 终端使用 SED 来执行查找和替换。

想象一下,我在整个文本文件中都有这个字符串:http ://www.find.com/page

我想用这个字符串替换它:http ://www.replace.com/page

我遇到了麻烦,因为我不确定如何正确转义或在字符串中使用“/”字符。例如,如果我只是想找到“cat”并替换为“dog”,我发现以下命令可以完美运行:

sed -i '' 's/cat/dog/g' file.txt

有没有人对如何实现相同的功能有任何想法,而不是 cat 和 dog 有包含“/”字符的字符串或 URL?我尝试了许多不同的方法来转义“/”字符,但似乎 SED 无法再“找到”字符串并且它不执行任何查找和替换操作。

非常感谢任何帮助或提示。

谢谢!

4

2 回答 2

192

/不是命令中分隔符sed,它只是可能的分隔符之一。对于这个例子,你可以使用,代替,因为它不会与你的字符串冲突;

echo 'I think http://www.find.com/page is my favorite' | 
    sed 's,http://www.find.com/page,http://www.replace.com/page,g'
于 2013-05-27T18:31:56.317 回答
42

sed可以将“s”后面的任何内容作为分隔符。由于您正在使用URL它,因此最好使用不同的分隔符,而不是在替换结束和替换开始时/不混淆。sed

/但是,话虽如此,如果您愿意,也绝对可以使用。您只需要转义文字/.

所以,你可以这样做:

sed 's/http:\/\/www.find.com\/page/http:\/\/www.replace.com\/page/g' input_file

或使用不同的分隔符来避免使您的神秘 sed 更加神秘。

sed 's#http://www.find.com/page#http://www.replace.com/page#g' input_file
于 2013-05-27T18:43:29.453 回答