我有一个文件,我想在其中查找关键字并输入两行以下的文本。
例如,假设我的文件包含以下单词
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
将更改写入到位。