bash中有没有将字符串转换为小写字符串的方法?
例如,如果我有:
a="Hi all"
我想将其转换为:
"hi all"
bash中有没有将字符串转换为小写字符串的方法?
例如,如果我有:
a="Hi all"
我想将其转换为:
"hi all"
当前回答
使用此命令执行同样的操作,它会将大写字符串转换为小写:
sed 's/[A-Z]/[a-z]/g' <filename>
其他回答
echo "Hi All" | tr "[:upper:]" "[:lower:]"
正则表达式
我想为我想分享的命令而感到自豪,但事实是我从http://commandlinefu.com.它的优点是,如果你cd到你自己的主文件夹中的任何目录,它会递归地将所有文件和文件夹更改为小写,请谨慎使用。这是一个出色的命令行修复程序,特别适用于您存储在驱动器上的大量相册。
find . -depth -exec rename 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;
您可以指定一个目录来代替查找后的点(.),该点表示当前目录或完整路径。
我希望这个解决方案证明是有用的,但这个命令不能做的一件事是用下划线替换空格-哦,也许下次吧。
对于Bash 3.2.+| Mac:
read -p 'What is your email? ' email
email=$(echo $email | tr '[:upper:]' '[:lower:]')
email="$email"
echo $email
Bash 5.1提供了一种通过L参数转换实现这一点的直接方法:
${var@L}
例如,你可以说:
v="heLLo"
echo "${v@L}"
# hello
也可以使用U大写:
v="hello"
echo "${v@U}"
# HELLO
第一个字母用u大写:
v="hello"
echo "${v@u}"
# Hello
对于仅使用内置的标准外壳(没有bashms):
uppers=ABCDEFGHIJKLMNOPQRSTUVWXYZ
lowers=abcdefghijklmnopqrstuvwxyz
lc(){ #usage: lc "SOME STRING" -> "some string"
i=0
while ([ $i -lt ${#1} ]) do
CUR=${1:$i:1}
case $uppers in
*$CUR*)CUR=${uppers%$CUR*};OUTPUT="${OUTPUT}${lowers:${#CUR}:1}";;
*)OUTPUT="${OUTPUT}$CUR";;
esac
i=$((i+1))
done
echo "${OUTPUT}"
}
对于大写:
uc(){ #usage: uc "some string" -> "SOME STRING"
i=0
while ([ $i -lt ${#1} ]) do
CUR=${1:$i:1}
case $lowers in
*$CUR*)CUR=${lowers%$CUR*};OUTPUT="${OUTPUT}${uppers:${#CUR}:1}";;
*)OUTPUT="${OUTPUT}$CUR";;
esac
i=$((i+1))
done
echo "${OUTPUT}"
}