Answers:
这是直接的方法sed
:
$ echo qWeRtY | sed -e 'y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/'
QwErTy
或者使用GNU的更简短的方式sed
,可以与您的语言环境中存在小写<->大写转换的任何字符一起使用:
$ echo qWeRtY | sed -E 's/([[:lower:]])|([[:upper:]])/\U\1\L\2/g'
QwErTy
如果可以使用其他工具,例如:
perl
(仅限ASCII字母):
$ echo qWeRtY | perl -pe 'y/[a-z][A-Z]/[A-Z][a-z]/'
QwErTy
perl
(更普遍):
$ echo 'αΒγ' | perl -Mopen=locale -pe 's/(\p{Ll})|(\p{Lu})/uc($1).lc($2)/ge'
ΑβΓ
sed
输入中使用GNU 和备用大小写。使用sed -re 's/([[:lower:]]?)([[:upper:]]?)/\U\1\L\2/g'
代替(仍然是GNU特定的)。第一个仅转换26个ASCII拉丁字母,而第二个转换由您的语言环境识别的任何字母。在tr
一个只能使在ASCII语言环境中的意义。在perl
一个只适用于ASCII拉丁字母。
POSIXly只能sed
通过提供您要翻译的完整字母集来完成,如@cuonglm所示。
tr
不过可以做到这一点,这tr
就是(音译)的含义:
tr '[:lower:][:upper:]' '[:upper:][:lower:]'
但是,在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~~}
与zsh -o extendedglob
:
out=${in//(#b)(([[:lower:]])|([[:upper:]]))/${(U)match[2]}${(L)match[3]}}
ⴠ
(e2 b4 a0)是Ⴠ
(e1 83 80);两者i
(69)和ı
(C4 B1)具有I
(49)为大写(除了在土耳其语言环境i
变İ
)。它不适用于GNU的原因tr
是GNU tr
使用字节而不是字符。
[:lower:]
or [:upper:]
(因此忽略第一个)。即使是法语,œ -> Œ
也c5 93 -> c5 92
使用UTF-8和bd -> bc
iso8859-15。
尽管它具有与tr
StéphaneChazelas提供的解决方案相同的局限性,但这是另一种实现方法:
{ echo QWERTYqwerty | dd conv=lcase
echo QWERTYqwerty | dd conv=ucase
} 2>/dev/null
qwertyqwerty
QWERTYQWERTY
我将其转储stderr
到/dev/null
那里,因为dd
还提供了其对2
文件描述符的所有操作的统计信息。根据您正在执行的操作,这可能会很有用,但不适用于本演示。您可以执行的所有其他操作dd
仍然适用,例如:
echo QWERTYqwerty | dd bs=1 cbs=6 conv=unblock,ucase 2>/dev/null
QWERTY
QWERTY
aBc
不会转换为AbC
)。
使用awk
:
awk '{print tolower($0)}' file.txt | tee file.txt
>file.txt
将通过截断文件开始
ruby
有一个字符串方法,类似命令行中的用法 perl
$ echo 'qWeRtY' | ruby -pe '$_.swapcase!'
QwErTy
另请参见ruby-doc编码
$ ruby -e 'puts Encoding.default_external'
UTF-8
$ echo 'αΒγ' | ruby -pe '$_.swapcase!'
ΑβΓ
让简单的事情保持简单。设计用于翻译字符的过滤器为tr
。
echo 1ude1UDE | tr [:upper:][:lower:] [:lower:][:upper:]
tr
会比sed
。