【问题标题】:bash (sed/awk?) find line in file and print stuff 3 lines above?bash (sed/awk?) 在文件中查找行并打印上面 3 行的内容?
【发布时间】:2013-01-27 05:07:48
【问题描述】:

我想在 txt 文件中查找一行,然后在找到的行上方插入字符串 3 行

输入:

aaa
bbb
ccc
ddd
eee
fff

我想查找“eee”,然后在其上方打印 3 行“WWW”。输出:

aaa
WWW
bbb
ccc
ddd
eee
fff

我正在使用 awk,只能在“eee”上方打印“WWW”1 行,而不是 3:

awk '/eee/{print "WWW"} 4' file.txt

有什么想法吗?

【问题讨论】:

  • 有可能,但相当复杂。你能解释一下为什么需要它吗?也许有更好的方法,不需要缓冲输出行。
  • 这是我正在处理的一些文本的快速修复。我想如果我可以在上面插入一行,不应该有一种简单的方法在上面插入 3 行吗?

标签: bash awk


【解决方案1】:

一种方式:

awk '{a[NR]=$0;}/eee/{a[NR-3]="www\n" a[NR-3];}END{for(i=1;i<=NR;i++)print a[i];}' file

【讨论】:

  • 这行得通,谢谢!!!你知道我怎么能匹配多行吗?我试过了:/eee\nfff/ 但它不起作用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
相关资源
最近更新 更多