我正在尝试通过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不再“找到”字符串,它不会执行任何查找&替换行动。
非常感谢任何帮助或提示。
谢谢!
答案 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