我想从日志文件中 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")"