SHELL脚本编程-字符串处理

          SHELL脚本编程-字符串处理

                                   作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

一.字符串切片

[root@node101.yinzhengjie.org.cn ~]# echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo {A..Z}|tr -d " "
ABCDEFGHIJKLMNOPQRSTUVWXYZ
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# `echo {A..Z}|tr -d " "`
-bash: ABCDEFGHIJKLMNOPQRSTUVWXYZ: command not found
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# str=`echo {A..Z}|tr -d " "`
[root@node101.yinzhengjie.org.cn ~]# echo $str
ABCDEFGHIJKLMNOPQRSTUVWXYZ
[root@node101.yinzhengjie.org.cn ~]# echo ${#str}                   #返回字符串变量var的长度
26
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${str:10}                 #返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0 到 ${#var}-1 之间(bash4.2后,允许为负值)
KLMNOPQRSTUVWXYZ
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${str: 10:-3}             #从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容(注意:"10"前面是有空格的)
KLMNOPQRSTUVW
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${str:10:3}               #返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
KLM
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${str: -3}                  #取字符串的最右侧几个字符(注意:冒号后必须有一空白字符)
XYZ
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${str: -5:-2}              #先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容(注意:"-5"前面时有空格的)
VWX
[root@node101.yinzhengjie.org.cn ~]# 

 

二.字符串处理

1>.基于模式取子串

${var#*word}:
    其中word可以是指定的任意字符
    功能:自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符串(含)之间的所有字符

${var##*word}:
    同上,贪婪模式,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容

${var%word*}:
  其中word可以是指定的任意字符
  功能:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符串(含)之间的所有字符

${var%%word*}:
  同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符
[root@node101.yinzhengjie.org.cn ~]# getent passwd root
root:x:0:0:root:/root:/bin/bash
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# rootinfo=`getent passwd root`
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo $rootinfo 
root:x:0:0:root:/root:/bin/bash
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${rootinfo#*root} 
:x:0:0:root:/root:/bin/bash
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${rootinfo##*root} 
:/bin/bash
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${rootinfo%/*}
root:x:0:0:root:/root:/bin
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${rootinfo%%/*}
root:x:0:0:root:
[root@node101.yinzhengjie.org.cn ~]# 
参考案例1
[root@node101.yinzhengjie.org.cn ~]# file="/var/log/messages"
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo $file 
/var/log/messages
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${file#*/} 
var/log/messages
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${file##*/} 
messages
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${file%/*}
/var/log
[root@node101.yinzhengjie.org.cn ~]# 
参考案例2
[root@node101.yinzhengjie.org.cn ~]# url1="https://www.cnblogs.com:80"
[root@node101.yinzhengjie.org.cn ~]# url2="ftp://node101.yinzhengjie.org.cn:21"
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url1%%:*}         #取出协议
https
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url2%%:*} 
ftp
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url1##*:}         #取出端口号
80
[root@node101.yinzhengjie.org.cn ~]# echo ${url2##*:} 
21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url1##*/} 
www.cnblogs.com:80
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url2##*/} 
node101.yinzhengjie.org.cn:21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo $url1 | sed -nr 's/.*\/(.*):.*/\1/p'
www.cnblogs.com
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo $url2 | sed -nr 's/.*\/(.*):.*/\1/p'
node101.yinzhengjie.org.cn
[root@node101.yinzhengjie.org.cn ~]# 
参考案例3

2>.查找替换

${var/pattern/substr}:
  查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之
${var
//pattern/substr}:
  查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之

${var/#pattern/substr}:
  查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
${var
/%pattern/substr}:
  查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
[root@node101.yinzhengjie.org.cn ~]# url="ftp://node101.yinzhengjie.org.cn:21"
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo $url
ftp://node101.yinzhengjie.org.cn:21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url/node101/www}
ftp://www.yinzhengjie.org.cn:21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url/:/#}
ftp#//node101.yinzhengjie.org.cn:21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url//:/#}
ftp#//node101.yinzhengjie.org.cn#21
[root@node101.yinzhengjie.org.cn ~]# 
参考案例

3>.查找并删除

${var/pattern}:
  删除var表示的字符串中第一次被pattern匹配到的字符串
${var
//pattern}:
  删除var表示的字符串中所有被pattern匹配到的字符串

${var/#pattern}:
  删除var表示的字符串中所有以pattern为行首匹配到的字符串
${var
/%pattern}:
  删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串
[root@node101.yinzhengjie.org.cn ~]# url="ftp://node101.yinzhengjie.org.cn:21"
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo $url
ftp://node101.yinzhengjie.org.cn:21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url/:}
ftp//node101.yinzhengjie.org.cn:21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url//:}
ftp//node101.yinzhengjie.org.cn21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
参考案例

4>.字符大小写转换

${var^^}:
  把var中的所有小写字母转换为大写

${var,,}:   把var中的所有大写字母转换为小写
[root@node101.yinzhengjie.org.cn ~]# url="ftp://NODE101.yinzhengjie.org.cn:21"
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo $url
ftp://NODE101.yinzhengjie.org.cn:21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url^^}        #将所有字母转换成大写
FTP://NODE101.YINZHENGJIE.ORG.CN:21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo ${url,,}        #将所有字母转换成小写
ftp://node101.yinzhengjie.org.cn:21
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
参考案例

 

posted @ 2019-11-25 22:12  尹正杰  阅读(555)  评论(0编辑  收藏  举报