您可以使用类似 Perl 的环视断言来匹配 A 和 B 之间的所有内容,不包括 A 和 B:
$ echo 'TEST test A foo bar B test' | grep -oP '(?<=A).*(?=B)'
foo bar
但是,考虑到迈克尔的回答,您必须将hexdump
输出转换为单个字符串才能使用grep
. 您可以在途中去掉“行号”:
hexdump filename | sed -r 's/\S{5,}//g' | tr '\n' ' '
或更好
hexdump filename | cut -d ' ' -f 2- | tr '\n' ' '
现在一切都在一条线上,所以grep
必须是懒惰的,而不是贪婪的:
$ echo 'TEST test A foo bar B test A bar foo B test' | grep -oP '(?<=A).*?(?=B)'
foo bar
bar foo
但迈克尔有一点,也许你应该使用更高级的东西,至少如果你需要不止一次这样做。
PS如果您可以在比赛中包括A和B,那就做
$ echo 'TEST test A foo bar B test A bar foo B test' | grep -oP 'A.*?B'
A foo bar B
A bar foo B