대소문자가 혼합된 문장에서 특정 패턴이 나타나는지 식별하는 데 도움이 되는 정규 표현식을 원합니다.
설명하다:
여우가 바위 위로 뛰어올랐어요
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)
.