您好,登錄后才能下訂單哦!
在shell腳本中我們所有變量的存儲(chǔ)形式都是字符串。所以對(duì)于字符串的截取來說就變得十分重要了。
而在shell腳本中,如果想要對(duì)一個(gè)字符串進(jìn)行指定的截取,有多種方法可以來完成:
如下舉例均用:STR="hello world my dear sister"
${STR#*char} 表示從左開始刪除第一個(gè)char左邊的所有字符,截取右邊的字符串
#!/bin/bash STR="hello world my dear sister" echo ${STR} CUT=${STR#* } echo ${CUT}
結(jié)果:
${STR##*char} 表示從左開始刪除最后一個(gè)char左邊的所有字符,截取右邊的字符串
將上例程序改為:
CUT=${STR##*/}
結(jié)果:
${STR%char*} 表示從右開始刪除第一個(gè)char右邊的所有字符,截取左邊的字符串
將上例程序改為:
CUT=${STR%/*}
同樣*可以看做是通配符,表示匹配右邊所有的字符刪除,保留左邊;
結(jié)果:
${STR%char*} 表示從右開始刪除最后一個(gè)char右邊的所有字符,截取左邊的字符串
將上例程序改為如下:
CUT=${STR%%/*}[object Object]
結(jié)果:
${STR:N:M} 表示從左邊第N個(gè)字符開始截取M個(gè)字符,不包括第N個(gè)字符
將上例程序改為:
CUT=${STR:3:8}
表示從左邊第3個(gè)字符開始截取后面的8個(gè)字符;如果N為0表示從第一個(gè)字符開始,但是包括第一個(gè)字符;
結(jié)果:
${STR:N} 表示從左邊第N個(gè)字符開始截取后面所有的字符,不包括第N個(gè)字符
將上面程序改為如下:
CUT=${STR:7}
表示從左邊第7個(gè)字符開始取后面的所有字符;
結(jié)果:
${STR:0-N:M} 表示從右邊第N個(gè)字符開始截取M個(gè)字符,包括第N個(gè)字符
將上例程序改為:
CUT=${STR:0-7:3}
表示從右邊開始數(shù)第7個(gè)字符開始,包括第七個(gè)字符本身,截取三個(gè)字符;
結(jié)果:
空格在行首的同時(shí)不輸出。其他字符是輸出的,大家可以下去試一試是否包含他本身
${STR:0-N} 表示從右邊第N個(gè)字符開始截取后面的所有字符,包括第N個(gè)字符
將上例程序改為:
CUT=${STR:0-7}
表示從右邊開始數(shù)第7個(gè)字符開始截取后面的所有字符;
結(jié)果:
空格不輸出。其他字符是輸出的,大家可以下去試一試是否包含他本身
${STR} | cut -c N 表示取從左邊開始數(shù)的第N個(gè)字符
示例代碼:
#!/bin/bash STR="hello world my dear sister" echo ${STR} echo ${STR} | cut -c 7
表示截取從左邊數(shù)第7個(gè)字符;
結(jié)果:
${STR} | cut -c N- 表示截取從左邊開始數(shù)的第N個(gè)字符往后的所有字符,包括第N個(gè)
更改如上程序:
echo ${STR} | cut -c 7-
表示從截取從左邊第7個(gè)字符開始剩下的所有字符;
結(jié)果:
${STR} | cut -c N-M 表示截取從左邊開始數(shù)的第N個(gè)字符到第M個(gè)字符之間的所有字符,包括第N個(gè)字符,但是不包括第M個(gè)字符
將程序改為如下:
echo ${STR} | cut -c 2-7
表示截取從左邊第2個(gè)字符到第7個(gè)字符之間的所有字符,包括第2個(gè)字符,不包括第7個(gè)字符;
結(jié)果:
${STR} | cut -c -N 表示截取從左邊開始數(shù)的第N個(gè)字符往前的所有字符,包括第N個(gè)字符
將程序改為如下:
echo ${STR} | cut -c -7
表示從左邊第7個(gè)字符開始數(shù)刪除后面所有的字符,截取前面的字符;
結(jié)果:
expr substr "${STR}" N M 表示從左邊第N個(gè)字符開始往后截取M個(gè)字符
示例程序:
#!/bin/bash STR="hello world my dear sister" echo ${STR} CUT=$(expr substr "${STR}" 3 5) echo $CUT
因?yàn)閑xpr是命令,所以上面的$()為命令替換,表示截取從左邊第3個(gè)字符開始往后截取5個(gè)字符;
結(jié)果:
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。