grep 출력에서 ​​부분 일치 숨기기

grep 출력에서 ​​부분 일치 숨기기

세션 ID 추출을 위한 정규식이 있습니다.

[root@docker tmp]# grep -oE "\[[0-9].+\]" logfile
[113a6d9e-7b06-42c6-a52b-7a4e4d2e216c]
[113a6d9e-7b06-42c6-a52b-7a4e4d2e216c]
[root@docker tmp]#

출력에서 대괄호를 숨기는 방법은 무엇입니까?

답변1

확장된 정규식 grep( )을 사용하는 대신, lookbehind 및 lookahead와 함께 -Eperl-regex grep( )을 사용하십시오 .-P

$ grep -oP "(?<=\[)[0-9].+(?=\])" logfile
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c

여기서는 접두사 가 (?<=\[)있어야 함을 나타내고 다음이 있어야 함을 나타내지 만 일치하는 출력에는 포함되지 않습니다.\[(?=\])\]

답변2

$ cat a.txt
test hello..[113a6d9e-7b06-42c6-a52b-7a4e4d2e216c]... this is
te [113a6d9e-7b06-42c6-a52b-7a4e4d2e216c].  this  is hello

$ grep -oP '(?<=\[)[^\]]*' a.txt
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c

https://stackoverflow.com/a/19242713/6947646

답변3

sed이 경우보다 더 적용 가능함grep

sed '/\n/{P;D;};s/\[/\n/;s/\]/\n/;D' log

답변4

가장 쉬운 방법은 삭제하는 것입니다 tr.

$ grep -oE "\[[0-9].+\]" logfile | tr -d '[]'
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c

tr유틸리티는 셸처럼 정규식이나 패턴을 이해하지 못합니다. 이 경우 []피연산자는 문자 두 개와 [입니다 ].

관련 정보