Bash的字符串操作
String="Hello World"
#获取字符串长度,获取字符长度的变量调用应该使用${},这里大括号是必须的
#例1-1
echo ${#String}
~$ 11
String="Hello World"
~$
#${String:开始截取的位置:结束截取的位置}
#例1-2:
echo ${String:6:10}
~$ World
例1-2的开始位置是6,但是bash实际截取位置在6+1,即W字符的位置
结束截取的位置是10,实际截取结果是d (d在此处是第11位字符). 可以得知bash在字符截取法上使用了N+1的方式
字符串截取可以缺省 “开始截取位置” 和 “结束截取位置” 中任意一个
#例1-3:
echo ${String:6}
~$ World
缺省位置bash会默认使用最长位置进行填充,例1-3中从第6位开始截取到最后一位字符
#例1-4:
echo ${String::11}
~$ Hello World
例1-4中bash将开始截取位置模式填充到了第一个字符,所以结果是获取全部的字符串
字符串截取可以使用负数的办法进行截取
#例1-5
echo ${String: -6}
~$ World
#使用负数时N+1将失效,按照实际字符位置进行截取,在-号前应当注意添加空格,不然会和默认变量值产生冲突
panttern匹配模式有头部匹配模式和尾部匹配模式两种,在这两种匹配模式的基础之上还有贪婪匹配和非贪婪匹配.
贪婪匹配的意思是匹配尽量多的内容,非贪婪匹配是匹配尽量少的内容,panttern匹配支持?,*,[]通配符
所有匹配模式均是删除匹配到字符,且必须连续不中断.连续不中断的意思是匹配的字符中间没有任何的隔断
例1-6
头部匹配模式中的非贪婪匹配
String="Hello World, My name is Bash. Hello"
echo ${String#?e?}
~$ llo World, My name is Bash. Hello
~$
echo ${String##?e?}
~$ lo World, My name is Bash. Hello
在这个匹配中,贪婪匹配和非贪婪匹配的结果一致,字符串末尾的Hel并没有被匹配
此时如果将字符串开头的Hello改成Helleo
String="Helleo World, My name is Bash. Hello"
echo ${String##?e?}
~$ leo World, My name is Bash. Hello
也并没有匹配到Helleo中的第二个?e?
尾部匹配模式的符号是%
例1-6-1
echo ${String%?l?}
~$ Hello World, My name is Bash. He
在变量名后添加%号会从字符串末尾匹配字符,两个%号是贪婪匹配模式
panttern匹配模式的匹配很奇怪,有一些不能理解, “非常规整并可以非常方便的使用通配符进行匹配的字符串” ,否则不建议使用panttern匹配
#例:1-6-2 (来自https://wangdoc.com/bash/string.html)
myPath=root/home/cam/book/long.file.name
~$
echo ${myPath%/*}
~$ root/home/cam/book
~$
echo ${myPath%%/*}
~$ root
例1-6-2就符合上述所说非常规整并可以非常方便的使用通配符进行匹配的字符串
ls
~$ a.jpg b.jpg c.jpg d.jpg
~$
#我们可以使用for循环遍历所有文件名
for i in ls
;
do
#在panttern匹配语法的后面添加一个.字符, .字符后面添加需要替换的字符
mv ${i} ${i%.*}.png
done
~$ a.png b.png c.png d.png
UPWER="upwer"
lower="LOWER"
#^^代表大写
echo ${UPWER^^}
~$ UPWER
#,,代表小写
echo ${lower,,}
~$ lower
#一目了然
Original: https://www.cnblogs.com/alanwoz/p/16385735.html
Author: alanWoz
Title: Bash编程中对字符串的操作
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607665/
转载文章受原作者版权保护。转载请注明原作者出处!