shell字符串处理总结
2021/4/9 7:30:20
本文主要是介绍shell字符串处理总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 字符串切片
1.1 基于偏移量取字符串
返回字符串 string 的长度 ${#string}
示例
[root@centos8 script]#str=" I Love Python " [root@centos8 script]#echo ${#str} 15 [root@centos8 script]#
返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分, offset的取值在0 到 ${#var}-1 之间(bash4.2后,允许为负值)
${var:offset}
[root@centos8 script]#str="I Love Python" [root@centos8 script]#echo ${str:2} # 从第2个字符开始取,默认取后面字符的全部,第2个字符不包含在内 Love Python [root@centos8 script]#
返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分 ${var:offset:number}
[root@centos8 script]#str="I Love Shell" [root@centos8 script]#echo ${str:2:4} # 从第2个字符开始取,取4个字符 Love [root@centos8 script]#
示例
[root@centos8 script]#str="I am CEO I am CTO" [root@centos8 script]#echo ${str:0:$((${#str}-8))} I am CEO [root@centos8 script]#
示例:年月日
[root@centos8 script]#today=$(date +"%Y%m%d") [root@centos8 script]#echo $today 20210408 [root@centos8 script]#Y_m_d=${today:0:4}"-"${today:4:2}"-"${today:6:2} [root@centos8 script]#echo $Y_m_d 2021-04-08 [root@centos8 script]#month=${today:0:6} [root@centos8 script]#echo $month 202104 [root@centos8 script]#
取字符串的最右侧几个字符,取字符串的最右侧几个字符, 注意:冒号后必须有一空白字符 ${var: -length}
[root@centos8 script]#str="I Love Shell" [root@centos8 script]#echo ${str:-3} I Love Shell [root@centos8 script]#echo ${str: -3} ell [root@centos8 script]#
从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容,即:掐头去尾 ${var:offset:-length}
[root@centos8 script]#str="I Love Shell" [root@centos8 script]#echo ${str:2:-3} Love Sh [root@centos8 script]#
先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容,注意:- length前空格
${var: -length:-offset}
[root@centos8 script]#str="I Love Shell" [root@centos8 script]#echo ${str: -2:-3} -bash: -3: substring expression < 0 [root@centos8 script]#echo ${str: -3:-2} e [root@centos8 script]#echo ${str:-3:-2} I Love Shell [root@centos8 script]#echo ${str: -3:-2} e [root@centos8 script]#echo ${str: -5:-2} She [root@centos8 script]#
1.2 基于模式取子串
# 其中word可以是指定的任意字符,自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字 符串开头至第一次出现word字符串(含)之间的所有字符 ${var#*word} # 同上,贪婪模式,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容 ${var##*word}
示例
[root@centos8 script]#file="var/log/messages" [root@centos8 script]#echo ${file#*/} log/messages [root@centos8 script]#echo ${file##*/} messages [root@centos8 script]#
# 其中word可以是指定的任意字符,功能:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符串(含)之间的所有字符 ${var%word*} # 同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符 ${var%%word*}
示例
[root@centos8 script]#file="var/log/messages" [root@centos8 script]#echo ${file%/*} var/log [root@centos8 script]#echo ${file%%/*} var [root@centos8 script]#
示例
[root@centos8 script]#url=http://www.baidu.com:8080 [root@centos8 script]#echo ${url##*:} 8080 [root@centos8 script]#echo ${url%%:*} http [root@centos8 script]#
2. 查找替换
查找 string 所表示的字符串中,使用 replace 替换第一次被 substring 所匹配到的字符串
${string/substring/replace}
示例
[root@centos8 script]#str="I LOVE Shell,I LOVE Python" [root@centos8 script]#echo ${str/LOVE/like} I like Shell,I LOVE Python [root@centos8 script]#
查找 string 所表示的字符串中,使用 replace 替换,所有能被 substring 所匹配到的字符串
${string//substring/replace}
示例
[root@centos8 script]#str="I LOVE Shell,I LOVE Python" [root@centos8 script]#echo ${str//LOVE/like} I like Shell,I like Python [root@centos8 script]#
查找 string 所表示的字符串中,以 replace 替换,行首被 substring 所匹配到的字符串,
${string/#substring/replace}
示例
[root@centos8 script]#str="I Love Go I Love Go" [root@centos8 script]#echo ${str/#Go/Python} I Love Go I Love Go [root@centos8 script]#
查找 string 所表示的字符串中,以 replace 替换,行尾被 substring 所匹配到的字符串,
${string/%substring/replace}
示例
[root@centos8 script]#str="I Love Go I Love Go" [root@centos8 script]#echo ${str/%Go/Python} I Love Go I Love Python [root@centos8 script]#
示例
touch {a..d}.html for file in `ls *.html` do mv $file ${file/%html/HTML} done
${value:-word} 当变量未定义或者值为空时,返回值为word内容,否则返回变量的值
result=${test:-UNSET} echo $result echo $test
示例:防止变量无值
# path="/var/log" find ${path:-/tmp} -type f -name "*.tar.gz" -exec rm -f {} \; # 当/var/log目录不存在时,删除/tmp目录下的内容,主要是防止/var/log目录不存在时会将root或者根删除
${value:=word} 若变量未定义或者值为空时,在返回word的值的同时,将word赋给value
注:变量替换的值也可以是``括起来的命令:$USERDIR={$Mydir:-pwd}
[root@centos8 script]#test="xufengnian" [root@centos8 script]#result=${test:=UNSET} [root@centos8 script]#echo $result xufengnian [root@centos8 script]#echo $test xufengnian [root@centos8 script]#
${value:?word}
[root@centos8 script]#test="xufengnian" [root@centos8 script]#result=${test:?UNSET} [root@centos8 script]#echo $result xufengnian [root@centos8 script]#echo $test xufengnian [root@centos8 script]#
${value:+word}
[root@centos8 script]#test="xufengnian" [root@centos8 script]#result=${test:+UNSET} [root@centos8 script]#echo $result UNSET [root@centos8 script]#echo $test xufengnian [root@centos8 script]#
3. 查找并删除
# 从变量$string开头开始删除最短匹配$substring子串 ${string#substring} [root@centos8 script]#str="I am xufengnian I am" [root@centos8 script]#echo ${str#I am} xufengnian I am [root@centos8 script]#
# 从变量$string开头开始删除最长匹配$substring子串 ${string##substring} [root@centos8 script]#str="I am xufengnian I am" [root@centos8 script]#echo ${str##I am} xufengnian I am [root@centos8 script]#
# 从变量$string结尾开始删除最短匹配$substring子串 ${string%substring} [root@centos8 script]#str="I am xufengian I am" [root@centos8 script]#echo ${str%I am} I am xufengian [root@centos8 script]#
# 从变量$string结尾开始删除最长匹配$substring子串 ${string%%substring} [root@centos8 script]#str="I am xufengnian I am" [root@centos8 script]#echo ${str%%I am} I am xufengnian [root@centos8 script]#
# 删除var表示的字符串中第一次被pattern匹配到的字符串 ${var/pattern} [root@centos8 script]#str="I am xufengnian I am" [root@centos8 script]#echo ${str/I am} xufengnian I am [root@centos8 script]#
# 删除var表示的字符串中所有被pattern匹配到的字符串 ${var//pattern} [root@centos8 script]#str="I am xufengnian I am" [root@centos8 script]#echo ${str//I am} xufengnian [root@centos8 script]#
示例:把下面所有系统中文件的文件名的finished内容去掉
touch 1_finished.jpg 2_finished.jpg 3_finished.jpg 4_finished.jpg 5_finished.jpg # 方法一: for file in `ls *.jpg` do mv $file ${file%finished*}.jpg done # 方法二: ls *.jpg|awk -F "finished" '{print "mv " $0,$1""$2}'|bash # 方法三: rename "finished" "" *.jpg
4. 字符大小写转换
# 把var中的所有小写字母转换为大写 ${var^^} # 把var中的所有大写字母转换为小写 ${var,,}
这篇关于shell字符串处理总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门
- 2024-12-27JWT单点登录原理学习入门