bash字符串處理

字符串切片:

${var:offset:length}

[root@localhost ~]#mypath="/etc/sysconfig/network-scripts/"
[root@localhost ~]# echo ${mypath:5}   #偏移5個字符顯示
sysconfig/network-scripts/
[root@localhost ~]# echo ${mypath:10}  #偏移10個字符顯示
nfig/network-scripts/
[root@localhost ~]# echo ${mypath:5:5} #偏移5個字符,取5個字符 
sysco

取出字符串的最後幾個字符:${var: -length}

    注意:-length之前有空白字符;

[root@localhost ~]# echo ${mypath: -10}
k-scripts/

基於模式取子串

${var#*word}:自左而右,查找var變量中存儲的字符串中第一次出現的由word所指明的字符,刪除此字符及其左側的所有內容;

 [root@localhost ~]#mypath="/etc/sysconfig/network-scripts"
[root@localhost ~]# echo ${mypath#*/}
etc/sysconfig/network-scripts

${var##*word}:自左而右,查找var變量中存儲的字符串中最後一次出現的由word所指明的字符,刪除此字符及其左側的所有內容;

[root@localhost ~]#mypath="/etc/sysconfig/network-scripts"
[root@localhost ~]# echo ${mypath##*/}
network-scripts

示例:

[root@localhost ~]#mypath="/etc/sysconfig/network-scripts"
[root@localhost ~]# echo ${mypath##*c}
ripts
[root@localhost ~]# echo ${mypath#*c}
/sysconfig/network-scripts

${var%word*}:自右而左,查找var變量中存儲的字符串中第一次出現的由word所指明的字符,刪除此字符及其右側的所有內容;

${var%%word*}:自右而左,查找var變量中存儲的字符串中最後一次出現的由word所指明的字符,刪除此字符及其右側的所有內容;

示例:

[root@localhost ~]#mypath="/etc/sysconfig/network-scripts"
[root@localhost ~]# echo ${mypath%c*}
/etc/sysconfig/network-s
[root@localhost ~]# echo ${mypath%%c*}
/et

示例:取一個URL的協議和端口

[root@localhost ~]#url="http://www.baidu.com:80"
[root@localhost ~]# echo ${url##*:}
80
[root@localhost ~]# echo ${url%%:*}
http

 

查找替換:

    ${var/pattern/replacement}:查找var變量存儲的字符中第一次由pattern匹配到的內容,並替換爲replacement;

[root@localhost ~]#url="http://www.baidu.com:80"
[root@localhost ~]# echo ${url/www/WWW}
http://WWW.baidu.com:80
[root@localhost ~]# echo ${url/w/W}
http://Www.baidu.com:80

    ${var//pattern/replacement}:查找var變量存儲的字符中所有能夠由pattern匹配到的內容,並替換爲replacement;

[root@localhost ~]# echo ${url//w/W}
http://WWW.baidu.com:80

    ${var/#pattern/replacement}:查找var變量存儲的字符中最開始處能夠由pattern匹配到的內容,並替換爲replacement;

[root@localhost ~]# userinfo="root:x:0:0:rootuser:/root:/bin/bash"
[root@localhost ~]# echo ${userinfo/#root/ROOT}
ROOT:x:0:0:root user:/root:/bin/bash

    ${var/%pattern/replacement}:查找var變量存儲的字符中最後位置能夠由pattern匹配到的內容,並替換爲replacement;

[root@localhost ~]# userinfo="root:x:0:0:rootuser:/root:/bin/root"
[root@localhost ~]# echo ${userinfo/%root/ROOT}
root:x:0:0:root user:/root:/bin/ROOT

查找刪除:

    ${var/pattern}:查找var變量存儲的字符中第一次由pattern匹配到的內容,並刪除;

    ${var//pattern}:查找var變量存儲的字符中所有能夠由pattern匹配到的內容,並刪除;

    ${var/#pattern}:查找var變量存儲的字符中最開始處能夠由pattern匹配到的內容,並刪除;

    ${var/%pattern}:查找var變量存儲的字符中最後位置能夠由pattern匹配到的內容,並刪除;

[root@localhost ~]# userinfo="root:x:0:0:rootuser:/root:/bin/root"
[root@localhost ~]# echo ${userinfo/root}
:x:0:0:root user:/root:/bin/root
[root@localhost ~]# echo ${userinfo//root}
:x:0:0: user:/:/bin/
[root@localhost ~]# echo ${userinfo/#root}
:x:0:0:root user:/root:/bin/root
[root@localhost ~]# echo ${userinfo/%root}
root:x:0:0:root user:/root:/bin/

字符串大小寫轉換:

    ${var^^}:把var變量中的所有小寫字母,統統替換爲大寫;

    ${var,,}:把var變量中的所有大寫字母,統統替換爲小寫;

[root@localhost ~]# echo $userinfo
root:x:0:0:root user:/root:/bin/root
[root@localhost ~]# myinfo=${userinfo^^}
[root@localhost ~]# echo $myinfo
ROOT:X:0:0:ROOT USER:/ROOT:/BIN/ROOT
[root@localhost ~]# echo ${myinfo,,}
root:x:0:0:root user:/root:/bin/root

變量賦值:

    ${var:-word}:如果變量var爲空或未聲明,則返回word所表示的字符串;否則,則返回var變量的值;

[root@localhost ~]# echo $name
                  #這行就是空的
[root@localhost ~]# echo ${name:-tom}
tom
[root@localhost ~]# name=hello
[root@localhost ~]# echo ${name:-tom}
hello

    ${var:=word}:如果變量var爲空或未聲明,則返回word所表示的字符串,並且把word賦值爲var變量;否則,則返回var變量的值;

[root@localhost ~]# echo $name
                                 #這行就是空的
[root@localhost ~]# name=${name:-tom}
[root@localhost ~]# echo $name
tom
[root@localhost ~]# name=${name:-jerry}
[root@localhost ~]# echo $name
tom

    ${var:?error}:如果變量var爲空或未聲明,則返回error爲錯誤信息;否則,則返回var變量的值;

[root@localhost ~]# echo "User's name is${name:?wrong}"
-bash: name: wrong
[root@localhost ~]# name=tom
[root@localhost ~]# echo "User's name is${name:?wrong}"
User's name is tom

    ${var:+word}:如果變量var爲空或未聲明,忽略;否則,則返回word;

[root@localhost ~]# unset name
[root@localhost ~]# echo "User's name is${name:+wrong}"
User's name is
[root@localhost ~]# name=tom
[root@localhost ~]# echo "User's name is${name:+wrong}"
User's name is wrong
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章