首页 > 解决方案 > 需要帮助在 macOS 上使用 sed 在两次连续匹配后插入文本

问题描述

如何使用 sed 在文件中的两个连续匹配后插入文本。这可能吗?如果是,我该如何执行以下操作?

我的文件:

abcdef()K
.xyz 1
('I want to add text here')

请注意,.xyz 将是相同的,但它可以是 1 或 2 或 3 或任何其他数字。但是 .xyz 肯定会在 abcdef()K 之下。我想在 .xyz 部分之后添加文本。

请帮助大家。谢谢。

标签: macossedzsh

解决方案


这可能对您有用(GNU sed):

sed -e '/abcdef()K/!b' -e ':a;n;/\.xyz/!ba' -e 'a new text added' file

如果一行不包含abcdef()K保释。

打印当前行并获取下一行。

如果当前行不包含.xyz,请重复上述操作。

否则,追加new text added到当前行。


sed -e '/abcdef()K/!b' -e ':a' -e 'n' -e '/\.xyz/!ba' -e 'a new text added' file

或者:

cat <<\! | sed -f - file
/abcdef()K/!b
:a
n
/\.xyz/!ba
a new text added
!

推荐阅读