cuo*_*glm 20
这是一个直接的方法sed
:
$ echo qWeRtY | sed -e 'y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/'
QwErTy
Run Code Online (Sandbox Code Playgroud)
或者更短的 GNU 方式sed
,使用任何在您的语言环境中存在小写<->大写转换的字符:
$ echo qWeRtY | sed -E 's/([[:lower:]])|([[:upper:]])/\U\1\L\2/g'
QwErTy
Run Code Online (Sandbox Code Playgroud)
如果您可以使用其他工具,例如:
perl
(仅限于 ASCII 字母):
$ echo qWeRtY | perl -pe 'y/[a-z][A-Z]/[A-Z][a-z]/'
QwErTy
Run Code Online (Sandbox Code Playgroud)
perl
(更普遍):
$ echo '???' | perl -Mopen=locale -pe 's/(\p{Ll})|(\p{Lu})/uc($1).lc($2)/ge'
???
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 16
POSIXly,sed
除非提供您想要转写的完整字母集,如@cuonglm 所示,否则无法做到这一点。
tr
不过可以这样做,这tr
就是(音译)的用途:
tr '[:lower:][:upper:]' '[:upper:][:lower:]'
Run Code Online (Sandbox Code Playgroud)
但是,在 Linux 上,它有局限性。在tr
基于 Linux 的系统上常见的 3 种实现中:
tr
,仅适用于单字节字符集。例如,Stéphane Chazelas
在 UTF-8 语言环境中,它给出sTéPHANE cHAZELAS
而不是sTÉPHANE cHAZELAS
. 这是 GNU 的一个已知限制tr
。tr
从传家宝工具箱中,不工作(你stéphane chazelas
)。tr
会做的事情。不过在 FreeBSD 上运行正常。您希望它在经过认证的 Unix 系统中也能正常工作。
该bash
外壳有一个专门的操作:
in=AbCdE
out=${in~~}
Run Code Online (Sandbox Code Playgroud)
与zsh -o extendedglob
:
out=${in//(#b)(([[:lower:]])|([[:upper:]]))/${(U)match[2]}${(L)match[3]}}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
60809 次 |
最近记录: |