我想找到一个最接近特定图案的图案。比如我想在“yyyy:”下面打印“bbb =”(它是与bbb = yyyy最接近的行)。它是第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的想法?
答案 0 :(得分:1)
这样的东西?
awk '/^## yyyy:/ { i = 1 }; i && /^bbb=/ { print; exit }'
或者上面的一行也可以匹配吗?在那种情况下,也许:
<击> 撞击>
<击>awk '/^bbb=/ && !i { p=NR; s=$0 }; /^bbb=/ && i { print (NR-i < i-p) ? $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)
}
答案 1 :(得分:0)
使用grep
:
grep -A 100 '##yyyy' filename | grep 'bbb='