我有一长串由换行符分隔的字符串,每个部分由以 开头的字符串分隔(文件中~
没有其他字符串)。~
我想扩展 grep 来查找~
匹配项正下方的文本。
输入:
abc
ads
acb
abc
acsa
acfs
~notthis
abc
ads
acb
xyz <-- pattern
acsa
acfs
~this <-- output
abc
ads
acb
abc
acsa
acfs
~no
搜索时的输出xyz
:
~ this
我awk
会做类似的事情
awk '/xyz/{x=1}x&&/~/{print;exit}' file
但我想使用 grep 如果它能给我带来性能优势
答案1
至少对于 GNU 来说grep 2.12
:
$ grep -Pzo 'xyz(?:.*\n)*?\K~this' file
~this
如果您的grep
版本不允许-P
使用-z
,您可以使用pcregrep反而:
$ pcregrep -Mo 'xyz(?:.*\n)*?\K~this' file
~this
答案2
cat "$file" | grep xyz -A 10000 | grep \~ -m1
或者,等价地,
grep -A 10000 xyz "$file" | grep -m1 '~'