在bash中搜索文件以查找regexp的最后一个匹配项

在bash中搜索文件以查找regexp的最后一个匹配项,regex,bash,shell,Regex,Bash,Shell,我对bash很在行,需要编写一个脚本来在.log文件中查找regexp的最后一个实例。然后返回整行。这在sed中是可能的还是我必须使用awk 谢谢 只需使用grep查找所有匹配项,并使用tail获取最后一个匹配项: grep regex file | tail -n 1 这样做: sed -nr '/YOUR_REGEXP/h; ${g;p}' INPUT_FILE grep将通过存储绝对无用的数据来消耗您的内存:您不需要除last之外的所有匹配项,但它将存储在内存中,但tail-n1只打

我对bash很在行,需要编写一个脚本来在.log文件中查找regexp的最后一个实例。然后返回整行。这在sed中是可能的还是我必须使用awk


谢谢

只需使用
grep
查找所有匹配项,并使用
tail
获取最后一个匹配项:

grep regex file | tail -n 1 
这样做:

sed -nr '/YOUR_REGEXP/h; ${g;p}' INPUT_FILE
grep将通过存储绝对无用的数据来消耗您的内存:您不需要除last之外的所有匹配项,但它将存储在内存中,但tail-n1只打印最后一个发生/匹配项。
是的,GNU sed比grep更快,并且支持更复杂的regexp。

两者都可以,但使用
grep regex file | tail-n1最简单
可以使用bash、sed或awk。如果你想尝试一下,我相信这里的人会很乐意帮你调试你的工作。@that otherguy谢谢,tail-n1做什么?引用
man
tail——显示文件的最后一部分
——在这种情况下,
stdin
的最后一行。谢谢@that otherguy和Siguza,这就成功了!普罗蒂普:永远保持礼貌的语气,以防你错了。在10M线路(693MB)和150k匹配线路(11MB)上,您的解决方案使用1MB rss和8秒,而我的解决方案使用1.5MB rss和2秒。i、 你的速度慢了四倍,节省了大量内存。