로그 파일에서 특정 줄을 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")"