regex - 在 sed 中对同一匹配执行多个命令
问题描述
sed
我知道我可以像这样针对匹配运行命令:
$ cat file
line1
line2
line3
line4
$ sed -e "/^line2/ s/^/# /" file
line1
# line2
line3
line4
是否可以在同一场比赛s/^/#/
中运行多个命令?s/$/ # invalid/
我尝试将它们都添加,但出现错误:
$ sed -e "/^line2/ s/^/# / s/$/ # /" file
sed: -e expression #1, char 18: unknown option to `s'
我尝试使用;
,但这似乎丢弃了初始匹配并在输入的每一行上执行:
$ sed -e "/^line2/ s/^/# / ; s/$/ # /" file
line1 #
# line2 #
line3 #
line4 #
解决方案
EDIT2:如果您非常希望在满足条件时执行多个语句,那么您可以使用{..}
如下块语句。(刚刚看到@Tiw 在评论中也提出了同样的建议。)
sed '/^line2/ {s/^/#/; s/$/ # invalid/}' Input_file
编辑:在这里添加另外 1 个解决方案sed
。(我只是line2
在内存缓冲区中\1
然后将替换/新值添加#
在它之前并# invalid
在它之后添加)
sed '/^line2/s/\(.*\)/# \1 # invalid/' Input_file
请您尝试以下操作。
sed "/^line2/ s/^/# /;/^line2/s/$/ # invalid/" Input_file
在您的尝试中发生了什么,您只是在进行替换,这发生在每一行上,无论它是否从开始line2
,所以当您在替换之前给出该条件时,它应该可以工作。
推荐阅读
- python - 我可以在 python 中的单个 if 语句中打印两个具有不同条件的语句吗?
- angular - 双击标题有子项时,Ag-grid 单元格编辑停止
- javascript - 制表符:buttonCross 的自定义图标?
- docker - 在 docker 中,我们可以使用 docker update 命令更新 cpu 资源,而无需重新启动容器,但为什么不在 k8s 中呢?甚至 VPA 也会重新启动 pod
- javascript - 在javascript中播放时持续时间发生变化时如何下载音频文件的完整长度
- spring - 发现客户端未为 Spring Health Actuator 初始化
- scala - Scala中的Failure(new RuntimeException("Some Failure")) vs Failure(throw new RuntimeException("Some Failure"))
- python - Pandas 为每个组添加一个新行
- python - 输出与主机名打印在同一行
- oracle - Oracle - 从日期中提取年份结果为 0