bash中有没有将字符串转换为小写字符串的方法?

例如,如果我有:

a="Hi all"

我想将其转换为:

"hi all"

当前回答

在zsh中:

echo $a:u

我爱你!

其他回答

仅对字母表进行大小写转换。所以,这应该很有效。

我专注于将a-z之间的字母从大写转换为小写。任何其他字符都应按原样打印在标准输出中。。。

将a-z范围内的path/to/file/filename中的所有文本转换为a-z

用于将小写转换为大写

cat path/to/file/filename | tr 'a-z' 'A-Z'

用于从大写转换为小写

cat path/to/file/filename | tr 'A-Z' 'a-z'

例如

文件名:

my name is xyz

转换为:

MY NAME IS XYZ

示例2:

echo "my name is 123 karthik" | tr 'a-z' 'A-Z'
# Output:
# MY NAME IS 123 KARTHIK

示例3:

echo "my name is 123 &&^&& #@$#@%%& kAR2~thik" | tr 'a-z' 'A-Z'
# Output:
# MY NAME IS 123 &&^&& #@0@%%& KAR2~THIK

在Bash 4中:

小写

$ string="A FEW WORDS"
$ echo "${string,}"
a FEW WORDS
$ echo "${string,,}"
a few words
$ echo "${string,,[AEIUO]}"
a FeW WoRDS

$ string="A Few Words"
$ declare -l string
$ string=$string; echo "$string"
a few words

大写

$ string="a few words"
$ echo "${string^}"
A few words
$ echo "${string^^}"
A FEW WORDS
$ echo "${string^^[aeiou]}"
A fEw wOrds

$ string="A Few Words"
$ declare -u string
$ string=$string; echo "$string"
A FEW WORDS

切换(未记录,但可在编译时配置)

$ string="A Few Words"
$ echo "${string~~}"
a fEW wORDS
$ string="A FEW WORDS"
$ echo "${string~}"
a FEW WORDS
$ string="a few words"
$ echo "${string~}"
A few words

大写(未记录,但可在编译时配置)

$ string="a few words"
$ declare -c string
$ string=$string
$ echo "$string"
A few words

标题大小写:

$ string="a few words"
$ string=($string)
$ string="${string[@]^}"
$ echo "$string"
A Few Words

$ declare -c string
$ string=(a few words)
$ echo "${string[@]}"
A Few Words

$ string="a FeW WOrdS"
$ string=${string,,}
$ string=${string~}
$ echo "$string"
A few words

要关闭声明属性,请使用+。例如,声明+c字符串。这会影响后续赋值,而不是当前值。

declare选项更改变量的属性,但不更改内容。示例中的重新分配会更新内容以显示更改。

编辑:

按照ghostdog74的建议,添加了“按单词切换第一个字符”(${var~})。

编辑:更正波浪号行为以匹配Bash 4.3。

正则表达式

我想为我想分享的命令而感到自豪,但事实是我从http://commandlinefu.com.它的优点是,如果你cd到你自己的主文件夹中的任何目录,它会递归地将所有文件和文件夹更改为小写,请谨慎使用。这是一个出色的命令行修复程序,特别适用于您存储在驱动器上的大量相册。

find . -depth -exec rename 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;

您可以指定一个目录来代替查找后的点(.),该点表示当前目录或完整路径。

我希望这个解决方案证明是有用的,但这个命令不能做的一件事是用下划线替换空格-哦,也许下次吧。

我知道这是一篇老掉牙的帖子,但我为另一个网站做了这个回答,所以我想我会把它贴在这里:

上部->下部:使用python:

b=`echo "print '$a'.lower()" | python`

或Ruby:

b=`echo "print '$a'.downcase" | ruby`

或Perl:

b=`perl -e "print lc('$a');"`

或PHP:

b=`php -r "print strtolower('$a');"`

或者Awk:

b=`echo "$a" | awk '{ print tolower($1) }'`

或Sed:

b=`echo "$a" | sed 's/./\L&/g'`

或Bash 4:

b=${a,,}

或NodeJS:

b=`node -p "\"$a\".toLowerCase()"`

您也可以使用dd:

b=`echo "$a" | dd  conv=lcase 2> /dev/null`

下部->上部:

使用python:

b=`echo "print '$a'.upper()" | python`

或Ruby:

b=`echo "print '$a'.upcase" | ruby`

或Perl:

b=`perl -e "print uc('$a');"`

或PHP:

b=`php -r "print strtoupper('$a');"`

或者Awk:

b=`echo "$a" | awk '{ print toupper($1) }'`

或Sed:

b=`echo "$a" | sed 's/./\U&/g'`

或Bash 4:

b=${a^^}

或NodeJS:

b=`node -p "\"$a\".toUpperCase()"`

您也可以使用dd:

b=`echo "$a" | dd  conv=ucase 2> /dev/null`

另外,当你说“shell”时,我假设你是指bash,但如果你能使用zsh,那就很简单了

b=$a:l

对于小写和

b=$a:u

用于大写。

简单的方法

echo "Hi all" | awk '{ print tolower($0); }'