【发布时间】:2018-01-02 20:06:47
【问题描述】:
使用 sed,当在其中找不到另一个模式(这里是 Pattern_of_interest)时,如何在两个模式(这里是 Pattern_one 和 Pattern_two)之间添加一个文本(这里是 Inserted_text)?
在我的文件中,end of line 字符只是一个 \n(即 Unix 格式),但我使用 GNU sed 版本 4.0.7 在 msdos 下工作。
我试过但没用的命令:
sed -i ":a;N;$!ba;/\nPattern_one/ /\nPattern_of_interest/! /\nPattern_two/ a/Inserted_text/" file.txt
模式都是从一行的开头开始的三个。
下面示例中的“blabla”可以是任何东西。
输入文件示例:-
blabla
blabla
Pattern_one
Pattern_of_interest blabla
blabla
Pattern_two
blabla
blabla
blabla
blabla
Pattern_one
Pattern_two
blabla
blabla
blabla
Pattern_one
blabla
blabla
Pattern_two
blabla
blabla
所需的输出文件(在顶部、iow、Pattern_one 旁边插入):
blabla
blabla
Pattern_one
Pattern_of_interest blabla
blabla
Pattern_two
blabla
blabla
blabla
blabla
Pattern_one
Inserted_text
Pattern_two
blabla
blabla
blabla
Pattern_one
Inserted_text
blabla
blabla
Pattern_two
blabla
blabla
所需的输出文件(在底部、iow、Pattern_two 旁边插入):
blabla
blabla
Pattern_one
Pattern_of_interest blabla
blabla
Pattern_two
blabla
blabla
blabla
blabla
Pattern_one
Inserted_text
Pattern_two
blabla
blabla
blabla
Pattern_one
blabla
blabla
Inserted_text
Pattern_two
blabla
blabla
我需要在顶部插入,但如果你也可以告诉我如何在底部插入,那也很好。
【问题讨论】:
-
我觉得这个更适合
awk,你有那个命令吗? -
@F.Hauri 这只会强化我的观点,即
awk更适合...该代码对我来说是希腊语,我过去曾试图理解它但无法理解。 . 并且使用 perl/awk 和更常用的编程流程对我来说更容易(对于大多数其他人来说也是 imo) -
@Sundeep :我同意你的观点,即 awk 脚本更易于处理。通常,我依靠 sed 从头开始格式化以纯文本形式存储的数据提取,然后在插入字段和记录分隔符后使用 awk 处理文件。
标签: sed