정규식에서 특정 단어 이외의 단어를 모두 대문자로 일치시키는 방법

정규식에서 특정 단어 이외의 단어를 모두 대문자로 일치시키는 방법

제거하고 싶은 대문자 단어가 모두 포함된 파일이 많지만 파일에 보관하고 싶은 작은 단어 집합도 있습니다. 정규식에서 이를 어떻게 수행합니까?

예를 들어:

파일 1.txt:

hello_world
HELLO
WORLD
HI
hi
test_string
TEST
TESTING

이 파일의 모든 대문자 단어를 제거하고 싶습니다. 단, TEST이 방법으로 TESTING 출력하면 다음과 같습니다.

hello_world
hi
test_string
TEST
TESTING

답변1

이를 통해 perl다음을 수행할 수 있습니다.

perl -C -pe 's/\b(?:(TEST|TESTING)|[\p{Lu}_]+)\b/$1/g' your-file

TEST및 를 제외하고 단어가 아닌 문자(단어 문자는 숫자 또는 밑줄임)로 구분된 하나 이상의 대문자 또는 밑줄 시퀀스는 제거됩니다 TESTING.

그러한 단어 하나로 구성된 행을 삭제하려면 다음을 수행하십시오.

sed -E '/^(TEST|TESTING)$/b
        /^[[:upper:]_]+$/d' your-file

또는

perl -C -lne 'print if $_ eq "TEST" ||
                       $_ eq "TESTING" ||
                       ! /^[\p{Lu}_]+$/' your-file

또는:

awk '$0 == "TEST" || $0 == "TESTING" || ! /^[[:upper:]_]+$/' your-file

또는 , , 가 비어 있거나 대문자 및 밑줄 이외의 문자가 하나 이상 포함된 줄의 경우 grep:TESTTESTING

grep -E '(^(TEST|TESTING)?$)|[^[:upper:]_]'

관련 정보