如何使用 sed 命令搜索带有“/”字符的字符串并替换为其他字符串?

如何使用 sed 命令搜索带有“/”字符的字符串并替换为其他字符串?

我已经运行了以下命令:

sed 's/http:\/\//www/' filename

在输出中,此命令没有将“http://”替换为“www”,为什么?

以及如何更改sed命令中的分隔符?

答案1

如果您只想用以下命令替换http://该行中第一次出现的www:,则您的原始命令是可以的

$ cat file.txt 
foo http:// bar http:// spam
egg http:// test http://

$ sed 's/http:\/\//www/' file.txt 
foo www bar http:// spam
egg www test http://

现在,由于您想要用 替换所有出现的http://,只需在末尾www添加修饰符:g

$ sed 's/http:\/\//www/g' file.txt 
foo www bar www spam
egg www test www

如果要设置除分隔符之外的字符,您可以选择对测试用例/没有特殊含义且更容易实现的字符,例如下划线( )在这种情况下将是不错的选择:sed_

$ sed 's_http://_www_g' file.txt 
foo www bar www spam
egg www test www

如果您想要修改原始文件并改变其内容,则需要-i选择就地编辑文件:

$ sed -i 's_http://_www_g' file.txt

如果您想同时备份原始文件:

$ sed -i.bak 's_http://_www_g' file.txt

该操作后,原文件将保留为file.txt.bak,修改后的文件将保留为file.txt

答案2

这实际上不会替换现有文件的内容,您需要将输出重定向到文件。

sed 's/http:\/\//www/' filename > filename.new

或者使用 -i 选项,

sed -i.bak 's/http:\/\//www/' filename

这将复制该文件并将其扩展名为 .bak,然后用命令的输出覆盖原始文件sed

.另外,这也会让您在域名之间没有空间,可能想.在 www 之后删除一个。

编辑:关于分隔符的问题,请查看这里。给出了示例,

从:在 sed 中使用不同的分隔符

基本上, sed 将“s”后面的内容作为分隔符。

sed 's_/a/b/c/_/d/e/f/_'

在这个例子中_是分隔符。

相关内容