将输出字段数据字符串放入变量中

将输出字段数据字符串放入变量中

我想从日志文件中 grep 查找某些特定行,然后在变量中捕获该输出的特定部分并在其他命令中使用它。

我的 grep 命令如下,其中 $1 是日期:

grep -a --binary-file=text "pattern" /home/path/archive/logs/path.log-$1

输出示例:

/home/path/archive/logs/path.log-2015-04-13.0.gz:2015-05-13 00:43:49,779 INFO [DEUX-DR-SAMPLE-1] c.i.s.p.DeuxProxyPMMProcessor [DEUX : 361] SVRREQ|dataID|server request: (deliver: (pdu: 0 5 0 282190) (addr: 1 1 adress)  (addr: 1 1 mssidn)  (sm: enc: ASCII msg: id:dataID stat:pattern)

从这个输出中,我只想获取该dataID字段并将其保存在变量中以供其他命令使用。虽然这样的行有数百行,但空格数不能用作获取字段的分隔符,dataID因为它每行都不同。

答案1

grep与 PCRE 一起使用:

$ var='/home/path/archive/logs/path.log-2015-04-13.0.gz:2015-05-13 00:43:49,779 INFO [DEUX-DR-SAMPLE-1] c.i.s.p.DeuxProxyPMMProcessor [DEUX : 361] SVRREQ|dataID|server request: (deliver: (pdu: 0 5 0 282190) (addr: 1 1 adress)  (addr: 1 1 mssidn)  (sm: enc: ASCII msg: id:dataID stat:pattern)'

$ grep -Po '.*?SVRREQ\|\K[^|]+(?=\|)' <<<"$var"
dataID

要将其保存在变量中:

$ foobar="$(grep -Po '.*?SVRREQ\|\K[^|]+(?=\|)' <<<"$var")"

相关内容