![키의 빈 값을 캡처하는 정규식](https://linux55.com/image/14418/%ED%82%A4%EC%9D%98%20%EB%B9%88%20%EA%B0%92%EC%9D%84%20%EC%BA%A1%EC%B2%98%ED%95%98%EB%8A%94%20%EC%A0%95%EA%B7%9C%EC%8B%9D.png)
아래 입력 문자열에서 "Comment" 값을 캡처하려고 하는데 regex = ^comment[\s*:]*(.*)
다음과 같은 출력이 표시됩니다.
"comment": "프로브 사이클 오류: 0"
No of Host Probes : 0
Max no of Host Probes : 0
rstIsFailure : 1
state : UNKNOW
comment :
probe cycle errors : 0
Perf Callback Ids : None
Group Member : __jjjjkj - U0
예상 출력:comment :
답변1
를 사용 sed
하고 다음 뒤에 첫 번째 공백 문자가 필요하지 않다고 가정합니다 :
.
sed '/^comment/!d; s/[^:]*:[[:blank:]]//' file
또는 하나의 편집 문만 사용하여
sed -n 's/^comment[[:blank:]]*:[[:blank:]]\(.*\)/\1/p' file
Python에서는 다음과 같이 보이고 싶습니다.
^comment[[:blank:]]*:[[:blank:]](.*)
아니면 어쩌면
^comment\s*:\s(.*)
Python이 POSIX 문자 클래스를 이해하지 못하는 경우.
이 [[:blank:]]*
비트는 공백이나 탭의 순서와 일치합니다. 이 패턴은 개행 문자를 포함하여 더 넓은 범위의 공백 문자와 일치한다는 점에서 \s
POSIX 문자 클래스와 더 유사합니다 .[[:space:]]
표현식의 문제는 문자열 내에서 전체 문서를 일치시키는 반면 Python(당신이 사용하고 있다고 가정)에서는 \s
문자열(전체 문서의 문자열)에 포함된 개행을 일치시킨다는 것입니다. 따라서 이 표현식은 첫 번째 비공백(개행 포함), non *
, non :
(둘 다 의 리터럴임 :
) , 문자(즉, 다음 줄의 in )부터 다음 개행까지 모든 것을 캡처합니다.*
[...]
p
probe