我想要一个正则表达式来帮助我识别某个模式是否以混合大小写形式出现在句子中。
说:
狐狸跳上了岩石
现在,我想知道图案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
这可以完全在 shell 内通过构造完成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)
不管。