在Linux中,awk
和sed
都是非常強大的文字處理工具,它們各自有著不同的設計用途和用法。
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則傾向於進行簡單的一次性文字替換和修改,常用於過濾、替換、刪除和插入文字行的操作。
綜上所述,在實際應用中,兩者常常結合使用,共同完成複雜的文字處理任務。