Lea*_*ode 42 bash escaping sed
我试图通过OS X终端使用SED来执行查找和替换.
想象一下,我在整个文本文件中散布着这个字符串:http://www.find.com/page
我想用这个字符串替换它:http://www.replace.com/page
我遇到了麻烦,因为我不确定如何正确地逃脱或使用我的字符串中的"/"字符.例如,如果我只是想找到"cat"并替换为"dog",我发现以下命令可以完美地运行:
sed -i '' 's/cat/dog/g' file.txt
Run Code Online (Sandbox Code Playgroud)
有没有人对如何实现相同的功能有任何想法,而不是猫和狗有容器"/"字符的字符串或URL?我尝试了许多不同的方法来转义"/"字符,但似乎SED不再"找到"字符串,它不会执行任何查找和替换操作.
非常感谢任何帮助或提示.
谢谢!
Joa*_*son 124
/它不是命令中的分隔符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'
Run Code Online (Sandbox Code Playgroud)
jay*_*ngh 33
sed可以采取"s"之后的任何内容作为分隔符.由于您正在使用URL它,因此使用不同的分隔符是一种很好的做法,除非在替换结束和替换开始时/不要混淆sed.
但是,/如果你愿意,你肯定可以使用.你只需要逃避文字/.
所以,你可以这样做:
sed 's/http:\/\/www.find.com\/page/http:\/\/www.replace.com\/page/g' input_file
Run Code Online (Sandbox Code Playgroud)
或使用不同的分隔符,以避免使你的神秘sed更加神秘.
sed 's#http://www.find.com/page#http://www.replace.com/page#g' input_file
Run Code Online (Sandbox Code Playgroud)