在sed命令和范围地址中使用不同的分隔符

在sed命令和范围地址中使用不同的分隔符

我正在使用shell脚本中的sed编辑文件系统路径名。假设我想替换:

  • /foo/bar

有:

  • /baz/qux

不过,是苏的s///命令使用正斜杠。/作为限制器。如果这样做,就会看到发出错误消息,例如:

▶ sed 's//foo/bar//baz/qux//' FILE
sed: 1: "s//foo/bar//baz/qux//": bad flag in substitute command: 'b'

类似地,有时我希望选择行范围,例如模式之间的行。foo/barbaz/qux..再说一次,我不能这么做:

▶ sed '/foo/bar/,/baz/qux/d' FILE
sed: 1: "/foo/bar/,/baz/qux/d": undefined label 'ar/,/baz/qux/d'

我能做什么?


繁星淼淼
浏览 626回答 1
1回答

慕森王

您可以使用另一个regex分隔符作为搜索模式,方法是反斜杠:sed '\,some/path,d'使用它就像用在s指挥:sed 's,some/path,other/path,'不过,您可能希望保护其他元字符;这是使用perl和perl的好地方。quotemeta,或者其他脚本语言中的等价物。从…man sed:/regexp/匹配正则表达式的行regexp.\cregexpc匹配正则表达式的行regexp..这个c可以是除反斜杠或换行符以外的任何字符。s/regular expression/replacement/flags将替换字符串替换为模式空间中正则表达式的第一个实例。除了反斜杠或换行符以外的任何字符都可以使用斜杠代替斜杠来分隔RE和替换。在RE和替换中,如果RE分隔符前面有反斜杠,则可以将其本身用作文字字符。
打开App,查看更多内容
随时随地看视频慕课网APP