Linux Bash 字串操作


Bash 是一種在 Linux 系統中使用的 shell 語言,允許使用者透過命令列介面與系統互動。Bash 提供了多種字串操作功能,可以幫助使用者操作和處理文字字串。本文將探討 Bash 中可用的各種字串操作技術。

基本的字串操作

Bash 提供了用於操作字串的基本操作。要在 Bash 中建立字串變數,只需將值賦給變數名即可:

mystring="Hello, world!"

要顯示字串變數的內容,可以使用 echo 命令:

echo $mystring

輸出結果為:

Hello, world!

要獲取字串的長度,可以使用 ${#} 語法:

echo ${#mystring}

輸出結果為:

13

要連線兩個字串,可以使用 ${} 語法:

string1="Hello,"
string2=" world!"
echo ${string1}${string2}

輸出結果為:

Hello, world!

字串替換

Bash 提供了各種技術來將字串的一部分替換為另一個字串。

子串替換

要將子串的第一次出現替換為另一個字串,可以使用 ${} 語法:

mystring="Hello, world!"
echo ${mystring/world/John}

輸出結果為:

Hello, John!

要將子串的所有出現替換為另一個字串,可以使用帶有 // 運算子的 ${} 語法:

mystring="Hello, world! Hello, John!"
echo ${mystring//Hello/Hi}

輸出結果為:

Hi, world! Hi, John!

要刪除子串的所有出現,可以使用帶有 // 運算子的 ${} 語法:

mystring="Hello, world! Hello, John!"
echo ${mystring//Hello/}

輸出結果為:

, world! , John!

正則表示式替換

Bash 還支援正則表示式替換。要將正則表示式的第一次出現替換為另一個字串,可以使用帶有 / 運算子的 ${} 語法:

mystring="Hello, world!"
echo ${mystring/[Hh]ello/Hi}

輸出結果為:

Hi, world!

要將正則表示式的所有出現替換為另一個字串,可以使用帶有 // 運算子的 ${} 語法:

mystring="Hello, world! hello, John!"
echo ${mystring//[Hh]ello/Hi}

輸出結果為:

Hi, world! Hi, John!

要刪除正則表示式的所有出現,可以使用帶有 // 運算子的 ${} 語法,並將空字串作為替換:

mystring="Hello, world! hello, John!"
echo ${mystring//[Hh]ello/}

輸出結果為:

, world! , John!

字串切片

Bash 允許使用者使用帶有 : 運算子的 ${} 語法從較大的字串中提取子字串。

要從字串的開頭提取子字串,可以使用 ${:n} 語法:

mystring="Hello, world!"
echo ${mystring:0:5}

輸出結果為:

Hello

要從字串的結尾提取子字串,可以使用 ${:-n} 語法:

mystring="Hello, world!"
echo ${mystring: -6}

輸出結果為:

world!

字串比較

Bash 提供了幾種比較字串的技術。

相等和不相等

要檢查兩個字串是否相等,可以使用 == 運算子:

string1="Hello, world!"
string2="Hello, world!"
if [ "$string1" == "$string2" ]; then
   echo "Strings are equal"
else
   echo "Strings are not equal"
fi

輸出結果為:

Strings are equal

要檢查兩個字串是否不相等,可以使用 != 運算子:

string1="Hello, world!"
string2="Hello, John!"
if [ "$string1" != "$string2" ]; then
	echo "Strings are not equal"
else
	echo "Strings are equal"
fi

輸出結果為:

Strings are not equal

大於和小於

Bash 還支援基於字母順序的字串比較。要檢查一個字串是否大於另一個字串,可以使用 > 運算子:

string1="abc"
string2="def"
if [ "$string1" > "$string2" ]; then
   echo "string1 is greater than string2"
else
   echo "string2 is greater than string1"
fi

輸出結果為:

string2 is greater than string1

要檢查一個字串是否小於另一個字串,可以使用 < 運算子:

string1="abc"
string2="def"
if [ "$string1" < "$string2" ]; then
   echo "string1 is less than string2"
else
   echo "string2 is less than string1"
fi

輸出結果為:

string1 is less than string2

正則表示式

Bash 在字串操作中提供對正則表示式的支援。正則表示式允許使用者根據模式搜尋和操作文字。

模式匹配

要使用正則表示式執行模式匹配,可以使用 =~ 運算子:

mystring="Hello, world!"
if [[ $mystring =~ ^Hello ]]; then
   echo "String starts with Hello"
else
   echo "String does not start with Hello"
fi

輸出結果為:

String starts with Hello

子串提取

要根據正則表示式模式提取子字串,可以使用帶有 =~ 運算子的 ${} 語法:

mystring="Hello, world!"
if [[ $mystring =~ ([A-Za-z]+), ]]; then
   echo "Match found: ${BASH_REMATCH[0]}"
   echo "First group: ${BASH_REMATCH[1]}"
else
   echo "No match found"
fi

輸出結果為:

Match found: Hello,
First group: Hello

字串連線

在 Bash 中,可以使用 + 運算子連線字串。要連線的兩個字串彼此相鄰放置,它們之間沒有任何分隔符。

string1="Hello"
string2="world"
concatenated_string="$string1$string2"
echo $concatenated_string

輸出結果為:

Helloworld

字串長度

要獲取 Bash 中字串的長度,可以使用 ${#} 語法。例如:

string="Hello, world!"
length=${#string}
echo $length

輸出結果為:

13

使用 sed 進行字串替換

Bash 還提供 sed(流編輯器)用於替換字串中的模式。sed 命令可以與管道一起使用來修改字串並顯示輸出。

例如,要將字串中所有出現的“world”替換為“Universe”,可以使用以下命令:

echo "Hello, world!" | sed 's/world/Universe/g'

輸出結果為:

Hello, Universe!

迴圈中的字串操作

字串操作也可以在 Bash 的迴圈中執行。例如,要遍歷具有“.txt”副檔名的檔案列表並透過附加“.bak”到檔名來重新命名它們,可以使用以下程式碼:

for file in *.txt
do
	mv "$file" "${file%.txt}.bak"
done

在上面的程式碼中,${file%.txt} 表示沒有“.txt”副檔名的檔名,並且“.bak”附加到它。

結論

在本文中,我們探討了在 Linux 上使用 Bash 進行字串操作的各種技術。Bash 提供了多種字串操作功能,包括基本操作、字串替換、字串切片和字串比較。此外,Bash 還支援正則表示式進行模式匹配和子字串提取。藉助這些工具,使用者可以操作和處理文字字串,以在 Linux 命令列介面上完成各種任務。

更新於:2023年3月24日

1K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.