bash對字符串的處理

 Bash對字符串的處理python

變量定義
bash 中,直接定義
# strs='x1x12y2y1x1x'
awk 中,定義
兩種方法,第一種,直接定義
# awk 'BEGIN{strs="x1x12y2y1x1x"}' /dev/null
第二種,使用-v參數
# awk -v strs=$strs
python 中,直接定義
>>> strs='x1x12y2y1x1x'
注意:文章中提到的替換,並不改變實際變量的值,只是基於原來的變量作一些運算,輸出結果而已。
  1. 字符串長度:${#str}
    # echo ${#strs}
    12
    或者,awk中使用length系統函數
    # awk -v strs=$strs 'END{print length(strs)}' /dev/null
    12
    或者,expr中使用length命令
    # expr length $strs
    12
    或者,python中使用len屬性
    >>> len(strs)
    12
     
  2. 求子串,特定段的字符串:${str:index:length}
    求第2個字符開始步長爲3:
    echo ${strs:1:3}
    1x1
    注意:若是是反向取,如取倒數第三個開始到末尾,${strs:-(3)},不是${strs:-3}。
    # echo ${strs:(-3)}
    x1x
     
  3. 求子串,通用的作法
    建議awk的的 substr命令來實現
    substr(s, i [, n])      Returns  the at most n-character substring of s starting at i.  If n is omitted, the rest of s is used.(man awk)
    使用的場景極少。
  4. 掐頭去尾
    掐頭,去掉前邊的x1x12:
    echo ${strs/*12}
    y2y1x1x
    去尾,去掉後從12開始的全部字符:
    # echo ${strs/12*}
    x1x
    注意:若是想明確標示去掉開頭或結尾的某幾個字符,則須要使用${strs/#str1}或${strs/%str1}。
    # echo ${strs/#x1x/}
    12y2y1x1x
    [root@localhost ~]# echo ${strs/%x1x/}
    x1x12y2y1
     
  5. 字符替換
    與掐頭去尾相似。能夠使用${strs/str1/str2}或${strs//str1/str2}來完成,能夠把掐頭去尾看成是字符替換的特例,在這裏分別表示 自左向右,替換str1爲str2一次和替換全部的str1爲str2。
    若是明確標示匹配的方向,須要用${strs/#str1/str2}或${strs/%str1/str2}代替,分別表示 自左向右匹配後替換,自右向左匹配後替換。
    [root@localhost ~]# echo ${strs/#x1x/555}
    55512y2y1x1x
    [root@localhost ~]# echo ${strs/%x1x/555}
    x1x12y2y1555
  6. 是否初始化或爲空:${strs-str1}或${str:-str1}
    對於一個未初始化的變量,和一個值爲空的變量在腳本中通常不作區分,可是不免會有極端的狀況。
    ${strs-str1}或${str:-str1},前者表示若是變量strs未初始化,則運算結果替換爲str1;後者表示若是strs變量爲空時,則運算結果替換爲str1。

    有這樣一個變量 unint
    看一下這兩個值:${unint:-未初始化或值爲空} 和 ${unint-未初始化或值爲空}
    [root@localhost ~]# echo ${unint:-未初始化或值爲空}
     
  7. 未初始化或值爲空
    [root@localhost ~]# echo ${unint-未初始化或值爲空}
    未初始化或值爲空
    如今咱們把unint換成inted,初始化它爲空串
    inted=""
    [root@localhost ~]# echo ${inted-未初始化}
    [root@localhost ~]# echo ${inted:-爲空}
    爲空
  8. 大小寫轉化
    請查閱:Linux下大小寫轉換方法全析[超級簡單]
    http://wangxiaoyu.blog.51cto.com/922065/197623
相關文章
相關標籤/搜索