前沿
在編寫shell腳本的時(shí)候薄声,很多情況下,我們都會(huì)遇到截取字符串的一部分這種需求窑业。由于不同的原始字符串差距較大愿汰,導(dǎo)致解決這個(gè)的方法也分不同的情況困后。
所以這篇文章不可能一次性的全部寫完,我會(huì)邊寫邊改衬廷,也會(huì)不停的升級(jí)更新。
知道關(guān)鍵字進(jìn)行截取
第一種情況是字符串只有一行汽绢,且這一行的內(nèi)容沒有什么特殊的分隔符吗跋,比如每個(gè)字段之間用空格分開。
也就是說這是一串亂碼字符串宁昭,我們需要在這串亂碼字符串中截取某一個(gè)關(guān)鍵字之前或者之后的內(nèi)容跌宛。
// 下面的varible表示的是需要處理的字符串變量
// string是需要在變量中搜索匹配的字符串
// “*”是一個(gè)通配符,位置按照下面的配置即可
${varible#*string} // 從左向右截取第一個(gè)string后的字符串
${varible##*string} // 從左向右截取最后一個(gè)string后的字符串
${varible%%string*} // 從右向左截取最后一個(gè)string后的字符串
${varible%string*} // 從右向左截取第一個(gè)string后的字符串
通過觀察上面的描述积仗,想必大家都清楚怎么使用了吧:
- 從左往右疆拘,用井號(hào)操作符;
- 從左往右寂曹,通配符在字符串左邊哎迄;
- 從右往左,用百分號(hào)操作符隆圆;
- 從右往左漱挚,通配符在字符串的右邊;
- 從第一個(gè)查找渺氧,用一個(gè)操作符旨涝;
- 從最后一個(gè)查找,用兩個(gè)操作符侣背;
下面進(jìn)行舉例說明:
先假設(shè)我需要處理的字符串是MyVar白华。
MyVar=Test1Test2Test3LuanMaTest2Test3.Test4 // 定義變量MyVar
echo $MyVar // 將MyVar這個(gè)變量打印出來
//得到的結(jié)果是: Test1Test2Test3LuanMaTest2Test3.Test4
echo ${MyVar#*Test2}
//得到的結(jié)果是: Test3LuanMaTest2Test3.Test4
echo ${MyVar##*Test2}
//得到的結(jié)果是: Test3.Test4
echo ${MyVar%Test2*}
//得到的結(jié)果是: Test1Test2Test3LuanMa
echo ${MyVar%%Test2*}
//得到的結(jié)果是: Test1
知道字符串的具體位置進(jìn)行截取
假設(shè)我們需要從原來字符串中截取一個(gè)固定位置的子字符串,那么可以用類似于編程語言中的索引進(jìn)行截取贩耐。
${varible:n1:n2} ## 截取變量varible從n1開始的n2個(gè)字符弧腥,組成一個(gè)子字符串。
## 注意是n1開始憔杨,然后是截取n2個(gè)字符鸟赫,并不是截取到n2的位置
## 繼續(xù)以上面的$MyVar 為例進(jìn)行說明
echo ${MyVar:5:10}
##得到的結(jié)果是: Test2Test3
以上兩種方式都針對(duì)的是簡單的字符串,也就是一行亂碼字符串的情況下,進(jìn)行處理抛蚤。
其余的待續(xù)台谢。