如何解决从日志文件中的特定行中过滤出编号
我有一个带有特定字符串的日志文件
"Received bla bla with count {} 23567"
需要获取位于行末的特定编号。 我们可以使用awk或grep,但无法使用以下命令来获取它。
grep "Received bla bla" logfile.log | grep '[0-9]'
由于日志文件的开头带有时间戳。
解决方法
Awk使您可以轻松地抓取一行中的最后一个元素。
awk '/Received bla bla/ { print $NF }' logfile.log
变量NF
包含当前行上的字段数(默认情况下,用空格分隔),并且在前面加一个美元符号表示具有该索引的字段,即最后一个字段。 (很方便,但对于Unix工具来说有点不寻常,Awk索引从1开始,而不是0。)
如果正则表达式需要来自变量,请尝试
awk -v regex='Received bla bla' '$0 ~ regex { print $NF }' logfile.log
运算符~
将右边的参数作为正则表达式应用到左边的参数,如果匹配则返回true值。 $0
是整个当前输入行。通过-v
选项,您可以在脚本开始执行之前从Awk外部设置Awk变量的值。
具有PCRE匹配的GNU grep:
grep -Po 'Received .* with count .*?\K\d+' file
,
sed -n 's/Received bla bla.* //p'
,
能否请您尝试以下。我在移动设备上,因此目前无法对其进行测试,这些应该可以,但是。
sed -E 's/.*([0-9]+$)/\1/' Input_file
如果您要通过搜索该行的特定文本来打印行末的数字,请尝试执行以下操作:
sed -E '/text to search/s/.*([0-9]+$)/\1/' Input_file
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。