如何在文件中查找单词并在其下方插入两行文本?

如何在文件中查找单词并在其下方插入两行文本?

我有一个文件,我想在其中查找关键字并输入两行以下的文本。

例如,假设我的文件包含以下单词

the
cow
goes
moo

我希望能够找到“cow”一词,并将文本“yay”输入文件中“cow”一词下方 2 行。

the
cow
goes
moo
yay

我相信这可以完成,sed但无法使其发挥作用。

任何帮助是极大的赞赏。

答案1

$ cat ip.txt 
the
cow
goes
moo

$ sed '/cow/{N;N; s/$/\nyay/}' ip.txt 
the
cow
goes
moo
yay
  • N;N;获取接下来的两行
  • s/$/\nyay/添加另一行

答案2

awk

awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1'
  • /cow/匹配cow记录,然后{print; getline; print; getline; print; print "yay"; next}打印该行,getline获取下一行,也打印,下一行相同,然后yay打印,然后转到下一行(next

  • 1(true) 将打印其余行作为默认操作

警告:

  • 如果要搜索的模式和 EOF 之间的行数少于两行,则将重复从模式开始的最后一行,以在两者之间形成两行

例子:

% cat file.txt
the
cow
goes
moo

% awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1' file.txt
the
cow
goes
moo
yay

答案3

其他sed

sed '/cow/! b;n;n;a\yay' file.txt

其他awk

awk '{print;this--};/cow/{this=2}! this{print "yay"}' file.txt

答案4

ed

ed file << EOF
/cow/+2a
yay
.
,p
q
EOF

打印修改后的输出;或者

ed file << EOF
/cow/+2a
yay
.
wq
EOF

或(作为bash单行)

printf '%b\n' '/cow/+2a' 'yay\n.' 'wq' | ed file

将更改写入到位。

相关内容