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

在sed命令和范围地址中使用不同的分隔符,sed,Sed,我在shell脚本中使用sed来编辑文件系统路径名。假设我想替换 /foo/bar 与 但是,sed的s//命令使用正斜杠/作为分隔符。如果我这样做,我会看到发出一条错误消息,如: ▶ sed的//foo/bar//baz/qux/'文件 sed:1:“s//foo/bar//baz/qux//”:替换命令中的错误标志:“b” 类似地,有时我想要选择行范围,例如模式foo/bar和baz/qux之间的行。再说一遍,我不能这样做: ▶ sed'/foo/bar/,/baz/qux/d'文件 s

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

/foo/bar

但是,sed的
s//
命令使用正斜杠
/
作为分隔符。如果我这样做,我会看到发出一条错误消息,如:

▶ sed的//foo/bar//baz/qux/'文件
sed:1:“s//foo/bar//baz/qux//”:替换命令中的错误标志:“b”
类似地,有时我想要选择行范围,例如模式
foo/bar
baz/qux
之间的行。再说一遍,我不能这样做:

▶ sed'/foo/bar/,/baz/qux/d'文件
sed:1:“/foo/bar/,/baz/qux/d”:未定义的标签'ar/,/baz/qux/d'

我能做什么?

您可以通过反斜杠将替代正则表达式分隔符用作搜索模式:

sed '\,some/path,d'
只需将其原样用于
s
命令:

sed 's,some/path,other/path,'
不过,您可能想保护其他元字符;这是在其他脚本语言中使用Perl和
quotemeta
或等效语言的好地方

man sed

/regexp/

匹配与正则表达式匹配的行
regexp

\cregexpc

匹配与正则表达式匹配的行
regexp
c
可以是反斜杠或换行以外的任何字符

s/正则表达式/替换/标志

用替换字符串替换模式空间中正则表达式的第一个实例。可以使用反斜杠或换行符以外的任何字符代替斜杠来分隔RE和替换。在RE和替换中,如果前面有反斜杠,则可以将RE分隔符本身用作文字字符


这回答了你的问题吗?
sed 's,some/path,other/path,'