Answers:
所有的:
tr '[:lower:]' '[:upper:]'
(不要忘了引号,否则这是行不通的,如果有一个称为文件:
,l
......或r
在当前目录)或:
awk '{print toupper($0)}'
要么:
dd conv=ucase
用于根据当前语言环境中定义的规则将字符转换为大写。但是,即使语言环境使用UTF-8作为字符集并明确定义了从小写到大写的转换,至少GNU dd
,GNU tr
和mawk
(awk
例如,Ubuntu上的默认设置)也不会遵循它们。此外,除了或之外,没有其他标准的方法来指定语言环境,因此,如果您希望将UTF-8文件可移植地转换为大写字母而不管当前语言环境如何,那么标准工具箱就不那么幸运了。C
POSIX
通常,出于便携性考虑,最好的选择是perl:
$ echo lľsšcčtťzž | PERLIO=:utf8 perl -pe '$_=uc'
LĽSŠCČTŤZŽ
现在,您需要注意,并不是每个人都同意特定字符的大写形式。
例如,在土耳其语区域设置中,大写字母i
不是I
,而是İ
(<U0130>
)。这里是传家宝工具,tr
而不是GNU tr:
$ echo ií | LC_ALL=C.UTF-8 tr '[:lower:]' '[:upper:]'
IÍ
$ echo ií | LC_ALL=tr_TR.UTF-8 tr '[:lower:]' '[:upper:]'
İÍ
在我的系统上,perl
to-upper转换是在中定义的/usr/share/perl/5.14/unicore/To/Upper.pl
,例如,toupper()
在C.UTF8
语言环境中,perl
它在GNU libc的几个字符上的行为有所不同,从而更加准确。例如,perl
正确地将correctly转换为Ɀ,而GNU libc(2.17)却没有。
我认为您可以使用awk
它及其toupper
功能来做到这一点。
不适用于GNU tr
:
$ echo lľsšcčtťzž | tr '[:lower:]' '[:upper:]'
LľSšCčTťZž
与GNU一起使用awk
:
$ echo lľsšcčtťzž | awk '{ print toupper($0) }'
LĽSŠCČTŤZŽ
tr
或awk
实现。例如tr
,根据当前的语言环境,大多数会在UTF8语言环境中正确转换字符,而GNU tr
不会。mawk
没有。
tr
,但与awk