bash script中字串處理
在撰寫bash script時,字串處理算是最常用到的功能了。而且你會需要用到的字串處理還真不少。以下是一些最近在學習時有使用到的字串處理功能的筆記。
不過如果最後再使用 tr 指令想要替換某個字元時,好像就無法正常讀入行的資料。所以最好是在內迴圈自行再處理。
sStr=${fullStr:0:10} # 由0開始取10個字元
移除部份字串
有時會需要將字串中符合樣式的部份給移除,且查詢的方式有分由前至後或由後至前,以及是移除最長或最短的樣式的組合。
例如有個完整的檔案路徑,想要分別取出檔名部份及路徑部份的話:
fullPath=/opt/game/setting.conf
fileName=${fullPath##*/}
path=${fullPath%/*}
字串串接
常常會需要將處理到的內容串接並保存到一個變數中,在bash script中可以用以下的指令完成:
newLine="${orgLine} other line"
可是如果你要處理的字串中含有'\r'這類的特殊字元時,要先將它去除,不然你會debug到死也不知為何你的字串都無法正常串接。因為雖然你有正常串接了,但在echo出來時,一遇到'\r'就會再將游標移到前頭重印,就會讓你以為你都沒有正確地串接字串。
要移除 '\r' 的話,可以用 tr 指令。例如:
removeLine=$(echo $newLine | tr '\r' ' ')
要由一個檔案中一行行地處理所要的資料時,可以用如下的方式:
while read -r line; do # your process done < <(cat $fileName | grep key1 | grep key2)
不過如果最後再使用 tr 指令想要替換某個字元時,好像就無法正常讀入行的資料。所以最好是在內迴圈自行再處理。
字串基本處理
截取部份字串:sStr=${fullStr:0:10} # 由0開始取10個字元
移除部份字串
有時會需要將字串中符合樣式的部份給移除,且查詢的方式有分由前至後或由後至前,以及是移除最長或最短的樣式的組合。
前至後 | 後至前 | |
移除最長 | ## | %% |
移除最短 | # | % |
例如有個完整的檔案路徑,想要分別取出檔名部份及路徑部份的話:
fullPath=/opt/game/setting.conf
fileName=${fullPath##*/}
path=${fullPath%/*}
int main(){ return 0; }
留言
張貼留言