在Linux中,如何使用awk和sed進行文字處理?

黄嘉波發表於2024-04-12

在Linux中,awksed都是非常強大的文字處理工具,它們各自有著不同的設計用途和用法。

awk
1. awk簡介:

awk 是一種程式語言,主要用於對文字檔案逐行處理,支援模式匹配和欄位分割等功能,特別適合於生成報表和格式化輸出。它的基本工作原理是讀取輸入檔案的每一行,然後按照指定的模式和動作進行處理。

2. awk基本用法:
  • 基礎結構awk 'pattern { action }' inputfile(s)

    • pattern:可選,指匹配行的條件,若不指定,則處理所有行。
    • { action }:滿足條件時執行的動作,可以包含各種操作和列印命令。
  • 內建變數

    • $0 表示當前行的內容。
    • $1, $2, ... 表示每行按照指定分隔符分割後的欄位。
    • FS 是欄位分隔符,預設為空格或製表符,可透過 -F 引數自定義。
  • 示例

    • 列印出文字檔案中第三列(欄位)的內容:

      awk '{print $3}' filename.txt
      
    • 如果想要列印出第一列大於10的所有行:

      awk '$1 > 10 { print }' numbers.txt
      
    • 定義變數和進行數學運算:

      awk '{ x = $1 + $2; print x }' data.txt
      
3. 常用內建變數:
  • $0:當前行內容。
  • $1, $2, ...:當前行的第1列、第2列等。
  • NF:當前行的欄位數量。
  • NR:當前處理的記錄數(行數)。
4. 更復雜的awk指令碼:

awk還支援條件判斷、迴圈、陣列、自定義函式等複雜操作,可以編寫完整的指令碼進行復雜的資料處理和分析。

sed
1. sed簡介:

sed (Stream Editor)是一種非互動式的流編輯器,它一次性處理輸入流(如檔案或管道輸入)中的文字,基於正規表示式進行搜尋和替換,適用於批次文字處理和簡單的文字轉換。

2. sed基本用法:
  • 基礎結構sed options 'commands' inputfile(s)

    • options:如 -i 表示直接修改原檔案, -e 可以執行多條命令。
    • 'commands':一系列針對文字流的操作命令,如s/pattern/replacement/flags(替換命令)。
  • 基本命令示例

    • 替換單詞:

      sed 's/old-word/new-word/g' textfile.txt
      
    • 刪除匹配行:

      sed '/pattern/d' textfile.txt
      
    • 插入文字:

      sed '/pattern/i\New line content' textfile.txt
      
    • 替換每一行末尾新增內容:

      sed 's/$/ appended text/' textfile.txt
      
3. 常用命令:
  • d:刪除行。
  • s:替換文字。
  • p:列印行。
  • a\:在當前行之後追加文字。
  • i\:在當前行之前插入文字。
4. 複雜sed指令碼:

sed支援多種命令和地址範圍操作,可以根據行號、正規表示式匹配的行執行相應的命令,甚至可以編寫多個命令組成的指令碼。

結論:
  • awk更適合於基於行和欄位進行資料處理、統計和分析的任務,它可以進行復雜的邏輯判斷和計算。
  • sed則傾向於進行簡單的一次性文字替換和修改,常用於過濾、替換、刪除和插入文字行的操作。

綜上所述,在實際應用中,兩者常常結合使用,共同完成複雜的文字處理任務。

相關文章