我有一个包含日志文件的目录。
我们感兴趣的是特定的日志行,类似于'xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
我们必须从该目录中的日志文件中提取所有类似的行,并打印出令牌“ABCDEG”。
复制是可以接受的 我们如何通过单个unix命令操作实现这一目标?
答案 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#'