我如何检测一个字符串的大小写(小写、大写、驼峰式[,也许是 WhATevERcAse])以应用于另一个字符串?
我想用 sed 或其他任何东西作为一个单行来完成它。
这用于提出更正建议的拼写检查器。
假设我得到类似 string_to_fix:correction:
BEHAVIOUR:behavior
=> 得到BEHAVIOUR:BEHAVIOR
Behaviour:behavior
=> 获取Behaviour:Behavior
behaviour:behavior
=> 保持behaviour:behavior
要处理的额外情况:
MySpecalCase:myspecialCase
=>MySpecalCase:MySpecialCase
(因此字符将是引用点而不是单词中的位置)
最佳答案
通过 awk,您可以使用 posix 字符类来检测大小写:
$ cat case.awk
/^[[:lower:]]+$/ { print "lower"; next }
/^[[:upper:]]+$/ { print "upper"; next }
/^[[:upper:]][[:lower:]]+$/ { print "capitalized"; next }
/^[[:alpha:]]+$/ { print "mixed case"; next }
{ print "non alphabetic" }
Jims-MacBook-Air so $ echo chihuahua | awk -f case.awk
lower
Jims-MacBook-Air so $ echo WOLFHOUND | awk -f case.awk
upper
Jims-MacBook-Air so $ echo London | awk -f case.awk
capitalized
Jims-MacBook-Air so $ echo LaTeX | awk -f case.awk
mixed case
Jims-MacBook-Air so $ echo "Jaws 2" | awk -f case.awk
non alphabetic
这里有一个例子,有两个字符串,并将第一个字符串的大小写应用于第二个字符串:
BEGIN { OFS = FS = ":" }
$1 ~ /^[[:lower:]]+$/ { print $1, tolower($2); next }
$1 ~ /^[[:upper:]]+$/ { print $1, toupper($2); next }
$1 ~ /^[[:upper:]][[:lower:]]+$/ { print $1, toupper(substr($2,1,1)) tolower(substr($2,2)); next }
$1 ~ /^[[:alpha:]]+$/ { print $1, $2; next }
{ print $1, $2 }
$ echo BEHAVIOUR:behavior | awk -f case.awk
BEHAVIOUR:BEHAVIOR
$ echo Behaviour:behavior | awk -f case.awk
Behaviour:Behavior
$ echo behaviour:behavior | awk -f case.awk
behaviour:behavior
关于regex - 检测字符串大小写并应用于另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41217920/