繁体   English   中英

如何打印具有最接近另一条具有特定图案的线的图案的线?

[英]How to print a line with a pattern which is nearest to another line with a specific pattern?

我想找到最接近特定图案的图案。 例如,我要打印“ yyyy:”下面的“ bbb =“(这是与yyyy的bbb =最接近的行)。 它是第8行。行号和顺序可能会更改,因此最好不要使用行号。

root#vi a
“ a” 15行

 1  ## xxxx:

 2  aaa=3

 3  bbb=4

 4  ccc=2

 5  ddd=1

 6  ## yyyy:

 7  aaa=1

 8  bbb=0

 9  ccc=3

10  ddd=3

11  ## zzzz:

12  aaa=1

13  bbb=1

14  ccc=1

15  ddd=1

您是否有为此目的使用awk或grep的想法?

像这样吗

awk '/^## yyyy:/ { i = 1 }; i && /^bbb=/ { print; exit }'

还是上面的一行也可以匹配? 在这种情况下,也许:

 
 
 
  
  awk '/^bbb=/ && !i { p=NR; s=$0 }; /^bbb=/ && i { print (NR-i < ip) ? $0 : s; exit }; /^## yyyy:/ { i=NR }'
 
  

考虑到可能没有上一个或下一个条目:

/^bbb=/ && !i { p1 = NR; s1 = $0 }
/^bbb=/ &&  i { p2 = NR; s2 = $0; exit }
/^## yyyy:/ { i = NR }
END {
    if (p1 == 0)
        print s2
    else if (p2 == 0)
        print s1
    else
        print (i - p1 < p2 - i ? s1 : s2)
}

使用grep快速又肮脏:

grep -A 100 '##yyyy' filename | grep 'bbb='

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM