[dev@localhost ~]$ TEST=STRESS2
[dev@localhost ~]$ echo ${TEST,,}
stress2
简单的方式
echo "Hi all" | awk '{ print tolower($0); }'
echo 'Đêm lưu trú năm nay' | awk '{ print tolower($0); }'
=> đêm lưu trú năm nay
,以及 echo 'ЛШТШФУМ АЩЬФ' | awk '{ print tolower($0); }'
=> лштшфум ащьф
。 - Walter Tross你可以尝试这个
s="Hello World!"
echo $s # Hello World!
a=${s,,}
echo $a # hello world!
b=${s^^}
echo $b # HELLO WORLD!
参考: http://wiki.workassis.com/shell-script-convert-text-to-lowercase-and-uppercase/
对于仅使用内置命令的标准shell(不含bash特性):
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}"
}
${var:1:1}
的子字符串是 Bashism。 - tripleeeA="HELLO WORLD"
typeset -l A=$A
来自 bash
manpage:
${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}
大小写修改。此扩展会修改parameter中字母字符的大小写。与路径名扩展一样,pattern也会被展开成一个模式。对于parameter展开后的每个字符,都会与pattern进行匹配,如果匹配成功,则改变其大小写。pattern不应尝试匹配多个字符。符号^将匹配pattern的小写字母转换为大写字母;符号,将匹配pattern的大写字母转换为小写字母。符号^^和,,会将展开后的值中的每个匹配字符转换,符号^和,仅匹配并转换展开后值中的第一个字符。如果省略了pattern,则像?一样处理,可以匹配任何字符。如果parameter是@或*,则逐个应用大小写修改操作到每个位置参数,并将扩展结果作为结果列表。如果parameter是用@或*下标的数组变量,则逐个对数组成员应用大小写修改操作,扩展结果为所得列表。
我想分享一个命令,但实际上是从http://commandlinefu.com获取并用于自己的。它的优点是,如果您cd
到您自己home文件夹中的任何目录,它将递归地将所有文件和文件夹更改为小写,请谨慎使用。这是一个很棒的命令行修复工具,特别适用于您存储在驱动器上的众多专辑。
find . -depth -exec rename 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;
perl
的prename
: dpkg -S "$(readlink -e /usr/bin/rename)"
会给出perl: /usr/bin/prename
。 - Tino转换大小写仅适用于字母。因此,这应该很好地工作。
我专注于将a-z范围内的字母从大写转换为小写。任何其他字符都应按原样打印在stdout中...
将路径/到/文件/文件名中的所有文本转换为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
针对 Bash3.2.+ | Mac:
read -p 'What is your email? ' email
email=$(echo $email | tr '[:upper:]' '[:lower:]')
email="$email"
echo $email
$ printf "%d\n" "'a"
97
$ printf "%d\n" "'A"
65
97 - 65 = 32
这是带有实例的可行版本。
请注意代码中的注释,它们解释了很多东西:
#!/bin/bash
# lowerupper.sh
# Prints the lowercase version of a char
lowercaseChar(){
case "$1" in
[A-Z])
n=$(printf "%d" "'$1")
n=$((n+32))
printf \\$(printf "%o" "$n")
;;
*)
printf "%s" "$1"
;;
esac
}
# Prints the lowercase version of a sequence of strings
lowercase() {
word="$@"
for((i=0;i<${#word};i++)); do
ch="${word:$i:1}"
lowercaseChar "$ch"
done
}
# Prints the uppercase version of a char
uppercaseChar(){
case "$1" in
[a-z])
n=$(printf "%d" "'$1")
n=$((n-32))
printf \\$(printf "%o" "$n")
;;
*)
printf "%s" "$1"
;;
esac
}
# Prints the uppercase version of a sequence of strings
uppercase() {
word="$@"
for((i=0;i<${#word};i++)); do
ch="${word:$i:1}"
uppercaseChar "$ch"
done
}
# The functions will not add a new line, so use echo or
# append it if you want a new line after printing
# Printing stuff directly
lowercase "I AM the Walrus!"$'\n'
uppercase "I AM the Walrus!"$'\n'
echo "----------"
# Printing a var
str="A StRing WITH mixed sTUFF!"
lowercase "$str"$'\n'
uppercase "$str"$'\n'
echo "----------"
# Not quoting the var should also work,
# since we use "$@" inside the functions
lowercase $str$'\n'
uppercase $str$'\n'
echo "----------"
# Assigning to a var
myLowerVar="$(lowercase $str)"
myUpperVar="$(uppercase $str)"
echo "myLowerVar: $myLowerVar"
echo "myUpperVar: $myUpperVar"
echo "----------"
# You can even do stuff like
if [[ 'option 2' = "$(lowercase 'OPTION 2')" ]]; then
echo "Fine! All the same!"
else
echo "Ops! Not the same!"
fi
exit 0
运行后的结果如下:
$ ./lowerupper.sh
i am the walrus!
I AM THE WALRUS!
----------
a string with mixed stuff!
A STRING WITH MIXED STUFF!
----------
a string with mixed stuff!
A STRING WITH MIXED STUFF!
----------
myLowerVar: a string with mixed stuff!
myUpperVar: A STRING WITH MIXED STUFF!
----------
Fine! All the same!
尽管如此,这应该仅适用于 ASCII 字符。
对我来说是可以的,因为我知道我只会将 ASCII 字符传递给它。
例如,我正在将其用于一些不区分大小写的 CLI 选项。
3^4 - 2^4 = 65
,3^4 + 2^4 = 97
。 - RARE Kpop Manifesto