![정규 표현식이 예상 데이터와 일치하지 않습니다.](https://linux55.com/image/210847/%EC%A0%95%EA%B7%9C%20%ED%91%9C%ED%98%84%EC%8B%9D%EC%9D%B4%20%EC%98%88%EC%83%81%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80%20%EC%9D%BC%EC%B9%98%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
다음 명령을 사용하여 필터 기준에 따라 데이터를 추출하려고 시도했지만 awk
작동하지 않습니다. 이 문제를 고칠 수 있나요?
awk -v RS='' -v ORS='\n\n' '/func: peak*down*HIL/' filename
입력하다:
func: peak_rec_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_some_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_rec_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_joy_HIL
sub: xyz
value: adc
log:path
close:date
예상 출력:
func: peak_some_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_joy_HIL
sub: xyz
value: adc
log:path
close:date
답변1
문제는 정규 표현식에 있습니다. 하위 문자열 사이의 임의의 문자 수와 일치하도록 *
각각 을 바꿔야 합니다 ..*
awk -v RS='' -v ORS='\n\n' '/func: peak.*down.*HIL/' file
각각은 *
표현식의 이전 부분의 동작을 수정하여 0번 이상 일치하도록 합니다. 이 표현식은 , 등 중 하나 peak*down
와 일치합니다 peadown
.peakdown
peakkdown
peakkkdown
파일 형식이 사용하는 것과 동일하기 때문에GNU 슬래시, 저는 개인적으로 데이터를 쿼리(또는 일반적으로 사용)하는 recsel
대신 다음을 사용합니다 .awk
recsel -e 'func ~ "peak.*down.*HIL"' file
범용 텍스트 처리 도구보다 데이터 형식을 이해하는 도구를 사용하는 것이 더 나은 경우가 많습니다(더 쉽고, 더 강력하며, 유지 관리가 더 쉽습니다).