![정규식에서 특정 단어 이외의 단어를 모두 대문자로 일치시키는 방법](https://linux55.com/image/221984/%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%97%90%EC%84%9C%20%ED%8A%B9%EC%A0%95%20%EB%8B%A8%EC%96%B4%20%EC%9D%B4%EC%99%B8%EC%9D%98%20%EB%8B%A8%EC%96%B4%EB%A5%BC%20%EB%AA%A8%EB%91%90%20%EB%8C%80%EB%AC%B8%EC%9E%90%EB%A1%9C%20%EC%9D%BC%EC%B9%98%EC%8B%9C%ED%82%A4%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
제거하고 싶은 대문자 단어가 모두 포함된 파일이 많지만 파일에 보관하고 싶은 작은 단어 집합도 있습니다. 정규식에서 이를 어떻게 수행합니까?
예를 들어:
파일 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
:TEST
TESTING
grep -E '(^(TEST|TESTING)?$)|[^[:upper:]_]'