awk를 사용하여 키워드를 검색해야 하는데 대소문자를 구분하지 않고(대소문자 구분 안 함) 검색을 수행하고 싶습니다.
내 생각에 가장 좋은 방법은 검색어("키워드")와 awk가 동시에 읽는 대상 행을 모두 대문자로 사용하는 것입니다. ~에서이 문제모두 대문자로 인쇄를 어떻게 사용할 수 있지만 toupper
해당 답변은 인쇄만 표시하고 변수에 대문자 텍스트를 남기지 않기 때문에 일치에 사용하는 방법을 모르겠습니다.
다음은 다음 입력이 주어진 예입니다.
blablabla
&&&Key Word&&&
I want all
these text and numbers 123
and chars !"£$%&
as output
&&&KEY WORD&&&
blablabla
나는 다음과 같은 출력을 원합니다.
I want all
these text and numbers 123
and chars !"£$%&
as output
이것이 내가 가지고 있는 것이지만 추가하는 방법을 모르겠습니다 toupper
.
awk "BEGIN {p=0}; /&&&key word&&&/ { p = ! p ; next } ; p { print }" text.txt
답변1
표현식을 /&&&key word&&&/
패턴과 일치시키기 위해 현재 행을 명시적으로 사용하는 다른 표현식으로 바꾸십시오(예:).$0
tolower($0) ~ /&&&key word&&&/
또는
toupper($0) ~ /&&&KEY WORD&&&/
그래서 당신은
awk 'tolower($0) ~ /&&&key word&&&/ { p = ! p ; next }; p' text.txt
$0
변수는 기본적으로 초기화되거나 처음 사용되며 아래 설명에서 언급된 기본 동작이므로 BEGIN 블록을 제거할 수 있기 ""
때문에 0
작은 {print}
따옴표 가 필요합니다.
답변2
gawk에는 IGNORECASE
0이 아닌 값으로 설정하면 모든 문자열 및 정규식 비교에서 대소문자를 구분하지 않는 내장 변수가 있습니다. 당신은 그것을 사용할 수 있습니다 :
BEGIN{IGNORECASE=1}
/&&&key word&&&/ { foo bar baz }
이것은 구체적이지만 gawk
meuh(더 이식성이 뛰어난) 대안보다 더 읽기 쉽다고 생각합니다. 물론 이것이 문제인지 여부는 전적으로 귀하에게 달려 있습니다.