我可以使用什么Bash命令将大写字符串转换为小写,反之亦然?
谢谢。
我可以使用什么Bash命令将大写字符串转换为小写,反之亦然?
谢谢。
Answers:
如果字符串已经存储在变量中,则可以使用bash
的参数扩展,具体来说${parameter,,pattern}
(自bash 4.0起可用),其中parameter
变量的名称为,pattern
并被忽略:
$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!
请注意,这不会更改变量的值,只会更改输出。要更改变量,您必须分配新值:
$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!
大写转换适用于${parameter^^pattern}
:
$ echo ${string^^}
HELLO, WORLD!
这也适用于Unicode字符串(至少在当前bash版本中,可能至少需要bash 4.3):
$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ
如果使用zsh
,则可以使用Parameter Expansion Flags(${(FLAGS)NAME}
;从zsh 2.5开始可用;)可以达到相同的结果。该bash
语法在zsh
1)中不起作用。小写的标志是L
; 大写的是U
:
$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"
这也适用于Unicode字符串(至少从zsh 5.0起;我没有尝试使用早期版本):
$ string='ἈΛΦΆβητος'
$ echo ${(L)string}
ἀλφάβητος
$ echo ${(U)string}
ἈΛΦΆΒΗΤΟΣ
1)尽管看到zsh的时间更长了,但它可能应该是:“ zsh
语法在中不起作用bash
。
${string,,}
符号仅适用于bash版本4+。否则,需要其他解决方案之一,例如$(echo $string | tr '[:upper:]' '[:lower:]')
。
很少有可以与Unicode一起正常使用的方法:
GNU sed 4.2.2的工作原理:
$ echo "Idą gęsi łąką" | sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ
庆典4.2.45申报并不能正常工作:
$ typeset -u ucase; ucase="Idą gęsi łąką"; echo $ucase
IDą GęSI łąKą
庆典4.2.45参数扩展并没有工作:
$ str="Idą gęsi łąką"; echo ${str^^}
IDą GęSI łąKą
bash 4.3.42 declare
和参数扩展工作:
$ declare -u ucase
$ ucase="Idą gęsi łąką"
$ echo $ucase
IDĄ GĘSI ŁĄKĄ
$ echo ${ucase,,}
idą gęsi łąką
GNU TR 8.20并没有工作:
$ echo "Idą gęsi łąką" | tr '[:lower:]' '[:upper:]'
IDą GęSI łąKą
mawk(在Ubuntu 13.10默认AWK)不不工作:
$ echo "Idą gęsi łąką" | mawk '{print toupper($0)}'
IDą GęSI łąKą
gawk 作品:
$ echo "Idą gęsi łąką" | gawk '{print toupper($0)}'
IDĄ GĘSI ŁĄKĄ
Perl的纯UC()并没有工作:
$ echo "Idą gęsi łąką" | perl -ne 'print uc($_);'
IDą GęSI łąKą
没有任何Unicode提示的Python 2 无法正常工作:
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().upper(),'
IDą GęSI łąKą
当指示要处理Unicode时,Python 2可以工作:
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
IDĄ GĘSI ŁĄKĄ
Python 3的工作原理:
$ echo "Idą gęsi łąką" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
IDĄ GĘSI ŁĄKĄ
gawk
默认的awk(如所示update-alternatives --display awk
)。您确定mawk
13.10是默认设置吗?
sed
自1990年以来一直支持该\U
选项;-)。不是特定的特定功能。否则,很好的答案,那么多的选择,那么少的时间;-)祝大家好运!
uc
在Perl中不起作用,因为您必须使用use Encode
或 use utf8
。将示例重写为 echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'
,它将起作用。另请参见 stackoverflow.com/a/13261662/3701431
我将使用bash内部排版或声明命令来定义小写变量。
$ typeset -l lcase
$ lcase="LoWeR cAsE"
$ echo $lcase
lower case
设置值时,字符降低,而不是键入变量时。因此,最好在脚本的开头进行排版。对于大写字母,可以键入-u。
$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE
这不是bash shell特有的,它也可以在ksh上工作,也许在POSIX shell定义中也可以。
编辑:许多人轻轻地向我指出,现在排版在bash上已被废弃,而由声明取代。这两个命令是等效的。
$ help typeset
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
Set variable values and attributes.
Obsolete. See `help declare'.
$ help declare
declare: declare [-aAfFgilrtux] [-p] [name[=value] ...]
Set variable values and attributes.
当我在异构环境上工作时,我本人仍在使用排版语法,因此不必重写脚本。
typeset
已被贬低并由declare
您可以使用tr
命令来完成。
在终端(Ctrl+ Alt+ T)
该命令:
echo 'String here' | tr "[:lower:]" "[:upper:]"
将小写转换为大写。
echo 'STRING HERE' | tr "[:upper:]" "[:lower:]"
将大写转换为小写。
例:
信誉归于网络城市
tr A-Z a-z
也可以使用。
这不是纯粹的bash解决方案,但您可以通过管道传递字符串perl
(就像 Oli所做的那样sed
):
$ echo lowercase | perl -ne 'print "\U$_"'
LOWERCASE
并且\L
会产生相反的效果:
$ echo UPPERCASE | perl -ne 'print "\L$_"'
uppercase
使用此简单命令大写到小写其中'f'是您要进行转换的文件名。
tr "A-Z" "a-z" < f
从小写到大写
tr "a-z" "A-Z" < f