2016-01-21 86 views
-1

我有一个包含日志文件的目录。从unix中的日志文件中提取令牌

我们感兴趣的是出外'xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
我们必须提取此目录中的日志文件中的所有类似的路线,并打印出令牌“ABCDEG”特定的日志行。

复制是可以接受的。
我们如何通过一个unix命令操作来实现这一点?

回答

1
sed -r '/platform=.*orderId=/s/.*orderId=([^|]+).*/\1/g' * 

从包含platform= & & orderId=/platform=.*orderId=/)的所有行,取字符(([^|]+))的non-|序列orderId=之后。

0
awk -F'|' '$2=="platform=SUN"{sub(/orderId=/,"", $4); print $4}' logFile* 

输出

ABCDEG

IHTH

+0

氏前提是这些比赛都是在固定列。 – tripleee

+0

答案基于提供的证据并有退款保证;-) – shellter

0
grep -rP "\|platform=SUN\|.*(?<=\|orderId=)" | sed s/.*platform=SUN.*orderId=// | sed s/\|.*// 
0
$ str='xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........' 
$ grep -Po 'platform=SUN.*orderId=\K[^|]*' <<< "$str" 
ABCDEG 

这需要Perl兼容的正则表达式(-P); -o只保留这场比赛。 \K是可变长度外观:“匹配左边的东西,但不包含匹配的字符串”。

0

从日志的目录,你可以运行下面的命令:

sed -n /platform=SUN/p * | sed 's#.*orderId=\(.*\)|.*$#\1#'