如何使用SED查找和替换目标字符串中带有“/”字符的URL字符串?

时间:2013-05-27 18:28:35

标签: bash sed escaping

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

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

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

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

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

有没有人对如何实现相同的功能有任何想法,而不是猫和狗有容器“/”字符的字符串或URL?我尝试了许多不同的方法来转义“/”字符,但似乎SED不再“找到”字符串,它不会执行任何查找&替换行动。

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

谢谢!

2 个答案:

答案 0 :(得分:109)

/不是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'

答案 1 :(得分:28)

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