【发布时间】:2021-01-08 01:23:13
【问题描述】:
给定一个类似的文件:
first line
second line DELETE ME
- third line
- fourth line
fifth line
sixth line DELETE ME
seventh line
- eighth line
还有模式 a (DELETE ME) 和模式 b ([[:blank:]]*-),我只想保留
first line
fifth line
seventh line
- eighth line
或者换句话说,我想删除包含模式 a 的每一行以及所有以模式 b 开头的直接跟随行>.
到目前为止,我只满足了部分但不是全部要求:
sed '/DELETE ME/{N;s/^[[:blank:]]*-//;d;}'
这应该删除所有包含 a 的行以及包含 b 的连续行。
【问题讨论】:
-
您是否致力于 sed,或者其他工具是否可以接受?
-
这是一个 yaml 文件吗?
-
sed '/DELETE ME/{:a;N;s/\n[[:blank:]]*-.*//;ta;!P;D}' file -
我的最终目标是:我有一个 gitlab-ci 模板存储库,其中包含许多 gitlab-ci yaml 文件,使用(可能嵌套)包含。现在我想为该存储库创建一个 gitlab-ci 文件,根据included CI lint tool(API)检查包含的所有文件的有效性。我发现this solution 用于稍微不那么通用的情况,但想使其适应我的用例. --- @WiktorStribiżew 似乎可行,您介意添加解释并提交作为答案吗?
标签: sed pattern-matching string-matching