linux命令从一行获取信息

时间:2014-08-29 12:26:39

标签: linux awk

我在linux中有一个文件,其中包含我的应用程序的日志。使用grep我得到了想要的行但我需要处理它们才能获得特定的值。更确切地说,我有下一个日志:

13 Jan 2014 15:22:18,291 DEBUG some data
13 Jan 2014 15:22:18,291 DEBUG some data
13 Jan 2014 15:22:18,291 DEBUG <request><object>3</object></request>
13 Jan 2014 15:22:18,291 DEBUG <request><object>4</object></request>
13 Jan 2014 15:22:18,291 DEBUG <request><object>5</object></request>
13 Jan 2014 15:22:18,291 DEBUG more data

使用下一个命令,我得到带有XML的日志行:

grep \<request\> myLog.log

但是我只想要<object>值。通常情况下,我使用awk进行此类操作,但是我只使用此命令来处理包含列的行,而我不知道如何实现此目的,有人能让我朝着正确的方向前进吗?有一个更好的命令,awk

谢谢!

3 个答案:

答案 0 :(得分:4)

grep -oP '<request><object>\K[^<]*' file

GNU grep与perl兼容的正则表达式

答案 1 :(得分:1)

你可以这样做:

awk -F"[<>]" '/<request>/ {print $5}' file
3
4
5

如果字段数量可能有所不同,那么此awk仅在<object>

之后打印值
awk -F"><object>" '/<request>/ {split($2,a,"<");print a[1]}' file
3
4
5

或者像这样:

awk -F"><object>" '/<request>/ {print $2+0}' file
3
4
5

答案 2 :(得分:1)

使用awk,您可以尝试匹配&lt; object&gt;或&lt; / object&gt;,捕获它,然后打印该捕获的第二列(在第一个捕获的&lt; object&gt;后面):

$ awk -F'</?object>' 'NF>1{print $2}' file