Shell 在unix中从日志文件中提取令牌

Shell 在unix中从日志文件中提取令牌,shell,unix,sed,grep,Shell,Unix,Sed,Grep,我有一个包含日志文件的目录 我们对一个特定的日志行感兴趣,该行类似于'xxxxxxxxx | platform=SUN |...| orderId=ABCDEG |...' 我们必须从这个目录中的日志文件中提取所有类似的行,并打印出标记“ABCDEG” 复制是可以接受的。 如何通过单个unix命令操作实现这一点 sed -r '/platform=.*orderId=/s/.*orderId=([^|]+).*/\1/g' * 从包含platform=和&orderId=(/platform=

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

我们对一个特定的日志行感兴趣,该行类似于
'xxxxxxxxx | platform=SUN |...| orderId=ABCDEG |...'

我们必须从这个目录中的日志文件中提取所有类似的行,并打印出标记“ABCDEG”

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

sed -r '/platform=.*orderId=/s/.*orderId=([^|]+).*/\1/g' *
从包含
platform=
和&orderId=(
/platform=.*orderId=/
)的所有行中,在
orderId=
之后取
非-
字符序列(
([^.]+)

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

ABCDEG

IHTH

grep-rP“\\\'124;平台=太阳”.*(
$str='xxxxxxxxx |平台=太阳……。| orderId=ABCDEG |·························

$grep-Po'platform=SUN.*orderId=\K[^ |]*'可以从日志目录运行以下命令:

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

假设这些匹配项在固定列中。答案基于提供的证据,并有退款保证;-)
$ str='xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
$ grep -Po 'platform=SUN.*orderId=\K[^|]*' <<< "$str"
ABCDEG
sed -n /platform=SUN/p   *  | sed 's#.*orderId=\(.*\)|.*$#\1#'