SHELL字符串提取的兩種方法實(shí)現(xiàn)
Shell 截取字符串通常有兩種方式:從指定位置開始截取和從指定字符(子字符串)開始截取。
一、從指定位置開始截取,Shell 同時(shí)支持從左和從右兩種計(jì)數(shù)方式
1.從字符串左邊開始計(jì)數(shù)
此方法需要提供位置參數(shù)和長度參數(shù),如${string:start:length},string 是要截取的字符串,start 是起始位置(省略的話表示從0開始),length 是要截取的長度(省略的話表示直到字符串的末尾)。
2.從字符串右邊開始計(jì)數(shù)
從字符串的右邊開始計(jì)數(shù),那么截取字符串的具體格式如下:${string:0-start:length},位置參數(shù)是0-start ,這是固定寫法。需要注意的是,不管從左邊還是從右邊開始計(jì)數(shù),截取方向都是從左到右。
上圖第三種輸出其實(shí)屬于第一種情況,表示從頭截取到(保留后三位)
二、從指定字符(子字符串)開始截取
這種截取方式無法指定字符串長度,只能從指定字符(子字符串)截取到字符串末尾。Shell 可以截取指定字符(子字符串)右邊的所有字符,也可以截取左邊的所有字符。
1. 使用 # 號(hào)截取右邊字符
使用#
號(hào)可以截取指定字符(或者子字符串)右邊的所有字符,具體格式如:${string#*chars} ,其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串),*
是通配符的一種,表示任意長度的字符串。*chars
連起來使用的意思是:忽略左邊的所有字符,直到遇見 chars(chars 不會(huì)被截?。?/p>
很容易發(fā)現(xiàn),如果不用*匹配,可以將字符串寫全。如果字符串中有多個(gè)相同的子串,那么匹配到第一個(gè)子串就結(jié)束了。如果希望直到最后一個(gè)指定字符(子字符串)再匹配結(jié)束,那么可以使用##
,具體格式為:${string##*chars}
2. 使用 % 截取左邊字符
使用%
號(hào)可以截取指定字符左邊的所有字符(子字符串),具體格式如下:${string%chars*}
請注意*
的位置,因?yàn)橐厝?chars 左邊的字符,而忽略 chars 右邊的字符,所以*
應(yīng)該位于 chars 的右側(cè)。
同樣的 如果字符串中有多個(gè)相同的子串,那么匹配到第一個(gè)子串就結(jié)束了。如果希望直到最后一個(gè)指定字符(子字符串)再匹配結(jié)束,那么可以使用##
,具體格式為:${string%%*chars}
熟練掌握這幾種對字符串的操作,一定會(huì)使你的shell更加精簡高效。
到此這篇關(guān)于SHELL字符串提取的兩種方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SHELL字符串提取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell字符串截取報(bào)錯(cuò):Bad substitution的解決
這篇文章主要介紹了shell字符串截取報(bào)錯(cuò):Bad substitution的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10unix編程創(chuàng)建前綴固定的臨時(shí)文件代碼分享
unix編程創(chuàng)建一個(gè)前綴固定的臨時(shí)文件,實(shí)現(xiàn)功能:創(chuàng)建一個(gè)臨時(shí)文件,并返回其文件描述符2013-12-12shell腳本實(shí)現(xiàn)本地文件與服務(wù)器文件同步
這篇文章主要介紹了本地文件與服務(wù)器文件同步shell腳本的方法,然后在文章給大家補(bǔ)充介紹了shell腳本備份本地服務(wù)器的文件到遠(yuǎn)程服務(wù)器的實(shí)例代碼,需要的朋友可以參考下2017-11-11詳解Linux使用shell+expect遠(yuǎn)程登錄主機(jī)
這篇文章主要介紹了詳解Linux使用shell+expect遠(yuǎn)程登錄主機(jī)的相關(guān)資料,這里提供了詳細(xì)的實(shí)現(xiàn)步驟,需要的朋友可以參考下2017-08-08