sed - 如果第一个失败,是否可以告诉 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
程序前面加上一个无害的命令,该命令使用一个永远不会匹配任何东西的正则表达式:
$ myvar=
$ sed -r "/$^/ =; s/$myvar/hellofoo/g; s/foo/bar/g" <(echo helloworld foo)
helloworld bar
推荐阅读
- php - 比较两个多维数组并根据匹配键替换值
- linux - 在 epoll 被阻塞时添加/删除 fd
- php - 计算 foreach 中的项目数并按类型显示
- airflow - 气流 - 尝试心跳时出现异常!睡眠 5.0 秒
- python - Python 中的 MCTS *tree* 并行化 - 可能吗?
- java - 解析 json 后无法在 RecyclerView 上显示 int 或 double
- postgresql - Postgresql:循环通过 date_trunc 生成的组
- dart - Flutter HTTP Post 返回 415
- netsuite - 如何在 NetSuite 表单的历史记录选项卡中添加注释
- javascript - Tipsi-Stripe 是仅用于创建 Stripe 代币还是您可以将其用于实际交易?