SHELL字符串提取的兩種方法實(shí)現(xiàn)
Shell 截取字符串通常有兩種方式:從指定位置開(kāi)始截取和從指定字符(子字符串)開(kāi)始截取。
一、從指定位置開(kāi)始截取,Shell 同時(shí)支持從左和從右兩種計(jì)數(shù)方式
1.從字符串左邊開(kāi)始計(jì)數(shù)
此方法需要提供位置參數(shù)和長(zhǎng)度參數(shù),如${string:start:length},string 是要截取的字符串,start 是起始位置(省略的話表示從0開(kāi)始),length 是要截取的長(zhǎng)度(省略的話表示直到字符串的末尾)。
2.從字符串右邊開(kāi)始計(jì)數(shù)
從字符串的右邊開(kāi)始計(jì)數(shù),那么截取字符串的具體格式如下:${string:0-start:length},位置參數(shù)是0-start ,這是固定寫(xiě)法。需要注意的是,不管從左邊還是從右邊開(kāi)始計(jì)數(shù),截取方向都是從左到右。
上圖第三種輸出其實(shí)屬于第一種情況,表示從頭截取到(保留后三位)
二、從指定字符(子字符串)開(kāi)始截取
這種截取方式無(wú)法指定字符串長(zhǎng)度,只能從指定字符(子字符串)截取到字符串末尾。Shell 可以截取指定字符(子字符串)右邊的所有字符,也可以截取左邊的所有字符。
1. 使用 # 號(hào)截取右邊字符
使用#
號(hào)可以截取指定字符(或者子字符串)右邊的所有字符,具體格式如:${string#*chars} ,其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串),*
是通配符的一種,表示任意長(zhǎng)度的字符串。*chars
連起來(lái)使用的意思是:忽略左邊的所有字符,直到遇見(jiàn) chars(chars 不會(huì)被截取)。
很容易發(fā)現(xiàn),如果不用*匹配,可以將字符串寫(xiě)全。如果字符串中有多個(gè)相同的子串,那么匹配到第一個(gè)子串就結(jié)束了。如果希望直到最后一個(gè)指定字符(子字符串)再匹配結(jié)束,那么可以使用##
,具體格式為:${string##*chars}
2. 使用 % 截取左邊字符
使用%
號(hào)可以截取指定字符左邊的所有字符(子字符串),具體格式如下:${string%chars*}
請(qǐng)注意*
的位置,因?yàn)橐厝?chars 左邊的字符,而忽略 chars 右邊的字符,所以*
應(yīng)該位于 chars 的右側(cè)。
同樣的 如果字符串中有多個(gè)相同的子串,那么匹配到第一個(gè)子串就結(jié)束了。如果希望直到最后一個(gè)指定字符(子字符串)再匹配結(jié)束,那么可以使用##
,具體格式為:${string%%*chars}
熟練掌握這幾種對(duì)字符串的操作,一定會(huì)使你的shell更加精簡(jiǎn)高效。
到此這篇關(guān)于SHELL字符串提取的兩種方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SHELL字符串提取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux命令之tail的使用及應(yīng)用場(chǎng)景介紹
tail 是一條在 Linux 系統(tǒng)中常用的命令行工具,用來(lái)顯示文件的末尾內(nèi)容,tail 的功能強(qiáng)大且簡(jiǎn)潔,能夠滿足多種應(yīng)用需求本文就給大家介紹一下Linux命令tail的使用及應(yīng)用場(chǎng)景,需要的朋友可以參考下2023-09-09如何解決 shell 腳本重復(fù)執(zhí)行的問(wèn)題
假如執(zhí)行備份腳本消耗的時(shí)間遠(yuǎn)大于設(shè)置的備份間隔的話,系統(tǒng)會(huì)出現(xiàn)多個(gè)同時(shí)在執(zhí)行腳本的Bash實(shí)例,會(huì)占用大量的系統(tǒng)資源,進(jìn)而影響正常業(yè)務(wù)程序的運(yùn)行,那如何解決上述shell腳本重復(fù)執(zhí)行的問(wèn)題呢,本文將要介紹的 flock 命令可以解決這個(gè)問(wèn)題2021-05-05shell字符串截取報(bào)錯(cuò):Bad substitution的解決
這篇文章主要介紹了shell字符串截取報(bào)錯(cuò):Bad substitution的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Shell腳本的條件測(cè)試和if條件語(yǔ)句使用方法
這篇文章主要介紹了Shell腳本的條件測(cè)試和if條件語(yǔ)句使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11unix編程創(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