从unix中的日志文件中提取标记

时间:2016-01-21 04:32:31

标签: shell unix sed grep

我有一个包含日志文件的目录。

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

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

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

<强>输出

ABCDEG

IHTH

答案 2 :(得分:0)

grep -rP "\|platform=SUN\|.*(?<=\|orderId=)" | sed s/.*platform=SUN.*orderId=// | sed s/\|.*//

答案 3 :(得分:0)

$ str='xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
$ grep -Po 'platform=SUN.*orderId=\K[^|]*' <<< "$str"
ABCDEG

这需要Perl兼容的正则表达式(-P); -o仅保留匹配。 \K是可变长度的后视:“匹配它左边的东西,但不要将它包含在匹配的字符串中”。

答案 4 :(得分:0)

从logs目录中,您可以运行以下命令:

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