shell程式設計-sed命令詳解(超詳細)

BigDataMagician發表於2024-06-14

目錄
  • 前言
  • 一、sed命令介紹
    • 1. sed命令簡介
    • 2. sed命令的基本語法
    • 3. 常用的sed命令選項
    • 4. 常用的sed編輯命令
  • 二、sed命令示例用法
    • 1. 替換文字
    • 2. 刪除匹配行
    • 3. 列印特定行
    • 4. 在指定行之前插入文字
    • 5. 從檔案中讀取編輯命令
    • 6. 使用sed命令在core-site.xml檔案中的<configuration>標籤之前新增新內容
    • 7. 使用sed命令替換core-site.xml檔案中的<configuration></configuration>標籤之間的內容
  • 總結


前言

在Shell程式設計中,對文字進行處理和轉換是一項常見的任務。sed命令作為一種流式文字編輯器,提供了強大的文字處理能力,可以透過簡單的命令實現複雜的文字操作。掌握sed命令的基本用法,可以極大地提高文字處理的效率和靈活性。

本文將從sed命令的基本概念和語法開始介紹,然後透過例項演示常見的用法,幫助讀者快速上手並靈活運用sed命令。無論是替換文字、刪除匹配行、列印特定行,還是插入文字、讀取編輯命令,本文都提供了詳細的示例和解釋,幫助讀者理解和掌握sed命令的使用技巧。


一、sed命令介紹

1. sed命令簡介

sed(Stream Editor)是shell程式設計中的一個流式文字編輯器,用於對文字進行轉換、替換和處理。它逐行讀取輸入文字,並根據指定的編輯規則對文字進行修改。

2. sed命令的基本語法

sed [選項] '編輯命令' 檔案

其中,編輯命令是一系列的編輯操作,用於指定對文字的處理方式。檔案是要處理的輸入檔案。

3. 常用的sed命令選項

  • -e <命令>:指定一個或多個編輯命令。
  • -f <指令碼檔案>:從指定的指令碼檔案中讀取編輯命令。
  • -i:直接在原始檔案上進行修改(在某些版本中可能需要指定備份檔案的副檔名)。
  • -n:禁止自動列印模式空間內容。
  • -r:啟用擴充套件的正規表示式語法(在某些版本中使用-E選項)。

4. 常用的sed編輯命令

  • s/模式/替換/:替換模式匹配的文字。
  • n:列印模式空間的內容。
  • d:刪除模式空間的內容。
  • p:列印模式空間的內容。
  • i\文字:在當前行之前插入文字。
  • a\文字:在當前行之後追加文字。
  • c\文字:用新文字替換匹配行。
  • r 檔案:將檔案的內容插入到當前行之後。
  • w 檔案:將模式空間的內容寫入檔案。

二、sed命令示例用法

1. 替換文字

sed -i "s|^dataDir=.*|dataDir=${installDir}/zookeeper-${version}/zk_snapshot|" "${installDir}/zookeeper-${version}/conf/zoo.cfg"

此程式碼來自:zookeeper安裝教程:使用shell指令碼在centos上進行zookeeper自動化下載安裝配置(單機版)

解釋:

  • -i: 是sed命令的選項之一,表示直接修改檔案內容,而不是輸出到標準輸出。
  • ^dataDir=: 正規表示式中的^表示行的開頭,dataDir=表示匹配以dataDir=開頭的行。
  • .*: 表示匹配任意字元(除了換行符)的任意次數。
  • dataDir=${installDir}/zookeeper-${version}/zk_snapshot: 是替換後的內容。
  • "${installDir}/zookeeper-${version}/conf/zoo.cfg": 這是要進行替換操作的檔案路徑。

2. 刪除匹配行

sed '/pattern/d' file.txt
  • /pattern/: 正規表示式模式,用於匹配檔案中的行。可以根據需要替換為具體的模式。
  • d: d表示刪除匹配到的行。
  • file.txt: 這是要進行操作的檔案路徑。

3. 列印特定行

sed -n '5p' file.txt

解釋:

  • -n: 是sed命令的選項之一,表示只輸出經過處理的行,而不是全部輸出。
  • '5p': 這是sed命令的列印操作部分。它使用了數字5來指定要列印的行號,並使用p表示列印該行。
  • file.txt: 這是要進行操作的檔案路徑。

4. 在指定行之前插入文字

sed '3i\Insert this line' file.txt

解釋:

  • '3i\Insert this line': 這是sed命令的插入操作部分。它使用了3來指定要插入的行號,並使用i表示插入操作。
  • \Insert this line是要插入的文字內容,\用於轉義特殊字元。

file.txt: 這是要進行操作的檔案路徑。

5. 從檔案中讀取編輯命令

sed -f script.sed file.txt
  • -f script.sed: 這是sed命令的選項,用於指定要執行的指令碼檔案。
  • script.sed是包含了多個sed操作的指令碼檔案的路徑。
  • file.txt: 這是要進行操作的檔案路徑。

6. 使用sed命令在core-site.xml檔案中的<configuration>標籤之前新增新內容

sed -i '/<\/configuration>/i '"$new_content"'' /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
  • -i: 這是sed命令的選項,表示直接修改原始檔案,而不是將結果輸出到標準輸出。
    '/<\/configuration>/i '"$new_content"'': 這是sed命令的插入操作部分。/<\/configuration>/是一個正規表示式,用於匹配檔案中的標籤。i表示插入操作。"$new_content"是一個變數,用於指定要插入的新內容。
    /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml: 這是要進行操作的檔案路徑。

7. 使用sed命令替換core-site.xml檔案中的<configuration></configuration>標籤之間的內容

sed -i '/<configuration>/,/<\/configuration>/c '"$new_content"'' /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

此程式碼來自:hadoop安裝與配置:使用Shell指令碼一鍵下載、安裝、配置Hadoop(單機版)

解釋:

  • -i: 這是sed命令的選項,表示直接修改原始檔案,而不是將結果輸出到標準輸出。
  • '/<configuration>/,/<\/configuration>/c '"$new_content"'': 這是sed命令的替換操作部分。/<configuration>/,/<\/configuration>/是一個範圍地址,用於匹配檔案中位於之間的內容。c表示替換操作。"$new_content"是一個變數,用於指定要替換的新內容。
  • /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml: 這是要進行操作的檔案路徑。

總結

sed命令是一種強大的流式文字編輯器,可以對文字進行轉換、替換和處理。本文介紹了sed命令的基本概念和語法,包括常用的選項和編輯命令。透過例項演示,我們展示了sed命令在替換文字、刪除匹配行、列印特定行、插入文字、讀取編輯命令等方面的用法。

掌握sed命令可以幫助我們更高效地處理和轉換文字,提高工作效率。希望本文對讀者理解和使用sed命令有所幫助,並能在實際工作中靈活運用。

希望本教程對您有所幫助!如有任何疑問或問題,請隨時在評論區留言。感謝閱讀!

相關文章