출력 필드 데이터 문자열을 변수에 넣습니다.

출력 필드 데이터 문자열을 변수에 넣습니다.

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

grepPCRE와 함께 사용:

$ 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")"

관련 정보