Linux 中的 sed 指令及範例

Linux 中的 sed 命令是一個功能強大的流編輯器,可讓您對輸入流(檔案或來自管道的輸入)執行基本文字轉換。它廣泛用於搜尋、尋找和取代、插入和刪除文件中的文字。與簡單的文字編輯器不同,sed 在管道中處理數據,對於在 shell 腳本中自動執行文字操作特別有用。

sed 的主要功能包括:

  • 使用正規表示式取代文件中的文字。
  • 根據特定模式刪除行。
  • 將文字插入或附加到特定行。
  • 根據複雜的模式轉換或轉換文字。

本指南將提供範例來示範 Linux 中 sed 命令的實際使用,以展示如何將其用於各種文字處理任務。

Sed 指令的關鍵語法和選項

在深入研究範例之前,掌握 sed 指令的主要語法至關重要:

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

以下是一些常用的選項:

  • -e:允許使用多個指令。
  • -n:列印每一行時禁止預設行為。
  • -i:就地編輯文件(請小心,因為它會修改原始文件)。

Linux 中 Sed 指令的基本範例

基本文字替換

sed 最常見的用途之一是替換文字。

echo "Welcome to Linux" | sed 's/Linux/Unix/'

輸出:

Welcome to Unix

全球替代

預設情況下,sed 會取代一行中的第一個符合項目。若要取代所有出現的情況,請使用“g”標誌。

echo "Apples are better than apples" | sed 's/apples/oranges/g'

輸出:

Apples are better than oranges

行刪除

sed 也可以根據特定模式刪除行。

echo -e "apple\norange\nbanana" | sed '/orange/d'

輸出:

apple
banana

插入和附加文本

您可以在模式匹配之前或之後引入新的文字行。

echo "Hello" | sed 'i\Good Morning'

輸出:

Good Morning
Hello

更改文字大小寫

使用 sed,您可以使用 y 函數來操作文字大小寫。讓我們來看一個將小寫轉換為大寫的範例:

echo "hello world" | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'

輸出:

HELLO WORLD

Linux 中 Sed 指令的高階用法

多模式文字替換

對於多種模式,您可以使用 -e 來連結各種替換命令。

echo "Welcome to Linux. I love Linux." | sed -e 's/Linux/Unix/' -e 's/love/adore/'

輸出:

Welcome to Unix. I adore Linux.

條件文字替換

使用 sed,可以根據某些條件使用地址替換文字。

echo -e "apple\nbanana\ncherry" | sed '/banana/s/$/ - favorite fruit/'

輸出:

apple
banana - favorite fruit
cherry

將 Sed 與正規表示式結合使用

利用正規表示式的強大功能來匹配複雜的模式。

echo "Price is $100" | sed 's/$[0-9]*/& (USD)/'

輸出:

Price is $100 (USD)

複雜替換的反向引用

反向引用可用於向後引用匹配模式的部分。

echo "The white cat and black dog" | sed 's/\(white\|black\) \(cat\|dog\)/\2 \1/'

輸出:

The cat white and dog black

使用 -i 選項就地編輯

sed 的強大功能之一是能夠直接編輯文件。這可以使用 -i 選項來實現,但在進行任何直接修改之前始終備份原始檔案。

echo "Original text" > temp.txt
sed -i 's/Original/Modified/' temp.txt
cat temp.txt

輸出:

Modified text

結論

理解和掌握 sed 命令可以顯著增強您在 Linux 中操作和處理文字檔案的能力。透過練習提供的範例,您可以了解如何有效處理常見的文字處理任務、自動執行重複的編輯作業以及將 sed 合併到腳本工作流程中。定期嘗試不同的 sed 選項和命令將加深您的知識並使您能夠充分利用其潛力。享受 sed 為您的 Linux 文字處理任務帶來的多功能性和強大功能。

Joshua James
跟我來
Joshua James 的最新帖子 (看全部)

發佈留言