在sed命令和范围地址中使用不同的分隔符
我在shell脚本中使用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
/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,'