대소문자가 혼합된 단어에 대한 정규 표현식

대소문자가 혼합된 단어에 대한 정규 표현식

대소문자가 혼합된 문장에서 특정 패턴이 나타나는지 식별하는 데 도움이 되는 정규 표현식을 원합니다.

설명하다:

여우가 바위 위로 뛰어올랐어요

jumped이제 패턴에 소문자가 있는지 알고 싶습니다 . 이 목표를 어떻게 달성할 수 있나요?

좀 더 명확하게 설명하겠습니다. 내가 원하는 것은 코드 파일의 키워드를 대문자로 만드는 것입니다. 이렇게 하려면 아직 대문자로 표시되지 않은 키워드를 식별해야 합니다.

Replace이상적으로는 이렇게 되어야 합니다 REPLACE.

하지만 그런 경우를 찾기 위해서는 단어에 소문자가 있는지 여부를 식별할 수 있어야 합니다.

답변1

printf %s\\n 'juMPEd'| sed 's/[^[:lower:]]//g'

산출

jud

답변2

Perl은 이 작업을 상당히 쉽게 수행할 수 있습니다.

$ echo 'Fox juMPed the rock' | perl -pe 's/jumped/\U$&/i'
Fox JUMPED the rock

대소문자를 구분하지 않는 항목을 찾아 jumped대문자 버전으로 바꿉니다.

답변3

grep -ioE를 사용하여 주어진 정규식과 일치하는 모든 항목을 얻을 수 있습니다.

$ echo "abc jumped def Jumped fgh JUMPED klm" > file.txt
$ grep -ioE "j\w+" file.txt > matches.txt
$ cat matches.txt
jumped
Jumped
JUMPED

이제 결과를 반복하고 하위/상위 일치 항목 전체를 제거할 수 있습니다(bash).

$ for w in $(cat matches.txt); do if [[ ! $w == ${w^^} && ! $w == ${w,,} ]]; then echo $w; fi; done > mixed.txt
$ cat mixed.txt
Jumped

각 혼합 단어에 대해 sed를 호출하여 주어진 일치 항목을 대문자로 표시할 수 있습니다.

$ for w in $(cat mixed.txt); do sed -i "s:$w:${w^^}:g" file.txt; done

답변4

이는 구성을 통해 쉘 내에서 완전히 수행될 수 있습니다 case.

string='Fox juMPed the rock'
case "$string" in
  *[:lower:]*) echo "The string contains lowercase letters.";;
esac

ksh에서는 typeset -u. 원본이 모두 대문자인지는 중요하지 않습니다.

string='Fox juMPed the rock'
typeset -u string
echo "SHOUTING: $string"

파일 작업을 하는 경우 awk 및 해당 toupper함수를 사용하여 문자열을 대문자로 변환할 수 있습니다. s대문자인지 여부를 테스트하는 데 사용할 수 있지만 관계없이 s == toupper(s)사용할 수도 있습니다 toupper(s).

관련 정보