#字符在/ bin / sed -e's#abc#zzz#g'中是什么意思?


Answers:


14

这是一个分隔符,就像"/",这是一样的's/abc/zzz/g'

这意味着搜索“ abc”,并将其替换为带有全局标志的“ zzz”,意味着对行中的所有“ abc”(不仅是第一个)执行此操作。

您也可以为模式地址使用替代分隔符,但是在这种情况下,您需要对其进行转义才能正确解释:

sed -r '\#abc#p'

24

它是分隔符或分隔符。最常用的是/

sed 's/old/new/' file

但是sed将命令后的第一个字符作为分隔符。您可以使用任何方便的字符,例如...

sed 's%old%new%' file

如果文件包含/(或其他常规定界字符),这将非常有用。您可以选择一些不需要将其放入sed表达式中的字符作为分隔符,从而避免了许多烦人的转义。

假设您要更换

https://askubuntu.com/questions

https://askubuntu.com/posts

你可以用

sed 's/https:\/\/askubuntu.com\/questions/https:\/\/askubuntu.com\/posts/' file

但是更好用

sed 's|https://askubuntu.com/questions|https://askubuntu.com/posts|' file

可能值得注意的是,至少在GNU sed中,/可以在s(替代)命令以外的上下文中用替代字符替换-但在这种情况下,需要第一次对其进行转义,例如sed '/foo/d'(删除与匹配的行foo)变为sed '\#foo#d'
steeldriver

确实是@steeldriver!-我看到Ravexina在他的回答中加上了这一点,所以我也许会离开我的:)
Zanna

1
流是否包含分隔符并不重要。重要的是搜索字符串或替换字符串是否包含分隔符。
kasperd

@kasperd哦,是的,是的。我略加编辑了:)
Zanna

@Zanna的答案很关键:命令“ s”后的第一个字符确定该命令中使用的分隔符。您可以在此处使用任何字符。sbabeb与相同s/a/e/
rexkogitans
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.