세션 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와 함께 -E
perl-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
답변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
유틸리티는 셸처럼 정규식이나 패턴을 이해하지 못합니다. 이 경우 []
피연산자는 문자 두 개와 [
입니다 ]
.