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

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)

  • 这太棒了,非常感谢你,我在自己身边一段时间并偶然发现了这个 - 对我来说绝对是一个改变游戏规则的人! (2认同)

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)

  • 处理URL时,空格字符可以很好地用作sed分隔符。它在外观上是干净的,永远不会出现在格式正确(即转义)的URL中。 (2认同)