regex - 检测字符串大小写并应用于另一个

标签 regex bash awk sed

我如何检测一个字符串的大小写(小写、大写、驼峰式[,也许是 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/

相关文章:

php - 密码正则表达式政府要求

linux - 反引号 - ` - 在命令行调用中特别针对 Git 命令有何作用?

regex - 在 bash 中拆分字符串

json - 如何在迭代值之前检查 jq 中是否存在 'key'

awk - awk 中的两个文件处理

javascript - 如何排除电子邮件地址中的 unicode 字符?

jquery - 如何删除 |每个ajax (Jquery) 加载页面时的Html 脚本

linux - 获取零后的数字

java - 如何创建时间匹配正则表达式模式

regex - 使用linux查找和替换