首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Shell 字串操作實戰指南:長度、截取、比對與替換完整範例

     編輯:Java 相關知識

前言

Shell 腳本處理文字是日常運維與自動化的基礎功夫。本文系統整理 Shell 中字串操作的核心技巧,包含長度計算、子串定位、切片擷取、模式比對與替換,所有範例均經實測可直接套用。

環境與變數設定

string="abc12342341"  # 等號兩邊不可有空格

1. 取得字串長度

echo ${#string}        # 結果:11(推薦,最簡潔)
expr length "$string"  # 結果:11
expr "$string" : ".*"  # 結果:11(正則匹配全字串)

2. 子串首次出現位置

expr index "$string" '123'  # 結果:4(注意:Shell 索引從 1 開始,非 0)

類似 JavaScript 的 indexOf,但起始索引不同,移植邏輯時需留意。

3. 從開頭匹配的最大長度

expr match "$string" 'abc.*3'  # 結果:9(匹配 "abc123423")

實務上較少用,通常改用 expr "$string" : 'pattern'。

4. 字串截取(切片)

語法結果說明
${string:4}2342341從索引 4 到結尾
${string:3:3}123從索引 3 取 3 字元
${string: -4}2341取後 4 字元(冒號後需有空格)
${string:(-4)}2341同以上,括號寫法更清晰
expr substr $string 3 3123expr 索引從 1 起算

語法與 PHP substr、Python 切片高度相似,熟悉其他語言者極易上手。

5. 模式匹配顯示內容

# 顯示匹配到的內容(而非長度)
expr match "$string" '\([a-c]*[0-9]*\)'   # abc12342341
expr "$string" : '\([a-c]*[0-9]\)'       # abc1(只匹配第一個數字)
expr "$string" : '.*\([0-9][0-9][0-9]\)' # 341(取最後三位數字)

括號 \( \) 為捕獲組,僅輸出括號內匹配內容,極利於欄位擷取。

6. 刪除匹配部分(前綴/後綴剪裁)

語法結果說明
${string#a*3}42341從左刪除最短匹配 a*3
${string##a*3}41從左刪除最長匹配 a*3
${string%3*1}abc12342從右刪除最短匹配 3*1
${string%%3*1}abc12從右刪除最長匹配 3*1

口訣:# 對應開頭(左邊),% 對應結尾(右邊);單符號最短,雙符號最長。

7. 字串替換

echo ${string/23/bb}    # abc1bb42341(替換第一處)
echo ${string//23/bb}   # abc1bb4bb41(全域替換)
echo ${string/#abc/bb}  # bb12342341(前綴匹配替換,類似 ^)
echo ${string/%41/bb}   # abc123423bb(後綴匹配替換,類似 $)

總結

Shell 字串操作雖語法獨特,但核心概念(索引、切片、正則捕獲、貪婪/非貪婪刪除)與主流語言互通。掌握上述 7 大類操作,足以應付 90% 以上的文字處理需求。建議收藏備查,實戰中靈活組合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved