首页 > 解决方案 > 如果第一个失败,是否可以告诉 sed 执行后续的替换?

问题描述

我可以将变量传递给 sed 替换命令,如下所示:

$ myvar=helloworld
$ sed -r "s/$myvar/hellofoo/g; s/foo/bar/g" <(echo helloworld foo)
hellobar bar

但如果变量为空,则失败:

$ myvar=
$ sed -r "s/$myvar/hellofoo/g; s/foo/bar/g" <(echo helloworld foo)
sed: -e expression #1, char 0: no previous regular expression

是否可以跳过第一个替换并执行第二个替换?我想要一个类似这样的输出:

$ myvar=
$ sed -r "s/$myvar/hellofoo/g; s/foo/bar/g" <(echo helloworld foo)
helloworld bar

标签: sed

解决方案


由于//重用了最后一个正则表达式,你可以在你的sed程序前面加上一个无害的命令,该命令使用一个永远不会匹配任何东西的正则表达式:

$ myvar=
$ sed -r "/$^/ =; s/$myvar/hellofoo/g; s/foo/bar/g" <(echo helloworld foo)
helloworld bar

推荐阅读