我有一个包含日志文件的目录。从unix中的日志文件中提取令牌
我们感兴趣的是出外'xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
我们必须提取此目录中的日志文件中的所有类似的路线,并打印出令牌“ABCDEG”特定的日志行。
复制是可以接受的。
我们如何通过一个unix命令操作来实现这一点?
我有一个包含日志文件的目录。从unix中的日志文件中提取令牌
我们感兴趣的是出外'xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
我们必须提取此目录中的日志文件中的所有类似的路线,并打印出令牌“ABCDEG”特定的日志行。
复制是可以接受的。
我们如何通过一个unix命令操作来实现这一点?
sed -r '/platform=.*orderId=/s/.*orderId=([^|]+).*/\1/g' *
从包含platform=
& & orderId=
(/platform=.*orderId=/
)的所有行,取字符(([^|]+)
)的non-|
序列orderId=
之后。
awk -F'|' '$2=="platform=SUN"{sub(/orderId=/,"", $4); print $4}' logFile*
输出
ABCDEG
IHTH
grep -rP "\|platform=SUN\|.*(?<=\|orderId=)" | sed s/.*platform=SUN.*orderId=// | sed s/\|.*//
$ str='xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
$ grep -Po 'platform=SUN.*orderId=\K[^|]*' <<< "$str"
ABCDEG
这需要Perl兼容的正则表达式(-P
); -o
只保留这场比赛。 \K
是可变长度外观:“匹配左边的东西,但不包含匹配的字符串”。
从日志的目录,你可以运行下面的命令:
sed -n /platform=SUN/p * | sed 's#.*orderId=\(.*\)|.*$#\1#'
氏前提是这些比赛都是在固定列。 – tripleee
答案基于提供的证据并有退款保证;-) – shellter