grep
是一個強大的命令行工具,用於在檔案或文本中搜索指定的字串或正則表達式。- 基本語法
#蒐索模式:可以是普通字串,也可以是正則表達式。
#檔案:指定要蒐索的檔案,可以是一個或多個檔案,也可以通過管道輸入。
grep [選項] "蒐索模式" 檔案
常用選項
選項 | 描述 |
---|
-i | 忽略大小寫匹配。 |
-v | 反向匹配,顯示未匹配的行。 |
-c | 僅輸出匹配的行數。 |
-n | 顯示匹配行的行號。 |
-l | 僅列出包含匹配內容的檔案名。 |
-o | 僅顯示匹配的部分,而非整行。 |
-r | 遞迴蒐索 |
-w | 完全匹配 |
-e | 指定正則表達式 |
示例
- 顯示
file.txt
中包含 "hello" 的所有行:
grep "hello" file.txt
- 顯示目錄
/path/to/directory
中所有包含 "hello" 的檔案及其匹配內容:
grep -r "hello" /path/to/directory
- 匹配 "error" 或 "ERROR" 等大小寫不同的文本:
grep -i "error" log.txt
- 顯示匹配 "pattern" 的行及其對應的行號:
grep -n "pattern" file.txt
- 列出當前目錄下所有包含 "keyword" 的檔案名:
grep -l "keyword" *.txt
- 顯示匹配 "important" 的行及其前後 2 行內容:
grep -C 2 "important" document.txt
awk
是一個功能強大的文本處理工具,用於在檔案或文本流中對數據進行格式化、過濾和分析操作。它支持基於模式的匹配和操作,適用於日誌分析、數據提取和簡單的腳本編寫。- 基本語法
#模式:用於匹配輸入數據的條件(可選)。
#動作:對匹配到的數據執行的操作(可選)。
#如果省略 模式,默認匹配所有行。
#如果省略 動作,默認列印匹配的行。
awk '模式 { 動作 }' 檔案
常用選項
選項 | 描述 |
---|
-F | 指定輸入欄位分隔符(默認是空格或製錶符)。 |
-v | var=value 定義變量並傳遞給 awk。 |
BEGIN | 在處理數據前執行的動作(如初始化)。 |
END | 在所有數據處理完成後執行的動作。 |
條件表達式 | 如 $1 > 100,匹配第一個欄位大於 100 的行。 |
常用內置變量
變量 | 描述 |
---|
$0 | 當前行的內容。 |
$1 ... | 當前行的第 1 個、第 2 個欄位,以此類推。 |
NR | 當前行號(Number of Record)。 |
NF | 當前行的欄位數(Number of Fields)。 |
FS | 輸入欄位分隔符(Field Separator)。 |
OFS | 輸出欄位分隔符(Output Field Separator)。 |
示例
awk '{ print $0 }' file.txt
awk '{ print $1, $3 }' file.txt
awk -F "," '{ print $2 }' data.csv
awk '$1 > 50 { print $0 }' file.txt
awk '/error/ { print $0 }' log.txt
awk '{ print $0, "欄位數:", NF }' file.txt
awk 'END { print "總行數:", NR }' file.txt
awk 'END { print "總行數:", NR }' file.txt
- 在檔案處理前列印 "處理開始",逐行列印第 1 個欄位,最後列印 "處理結束":
awk 'BEGIN { print "處理開始" } { print $1 } END { print "處理結束" }' file.txt
awk -v threshold=100 '$1 > threshold { print $0 }' file.txt
awk '{ sum += $1 } END { print "總和:", sum }' file.txt
sed
(Stream Editor)是一個強大的流編輯器,用於對文本進行批量處理。它支持查找替換、刪除、插入等多種文本操作,適用於處理檔案或標準輸入中的文本流。- 基本語法
#腳本命令:指定對文本進行操作的規則,如替換或刪除。
#檔案:要處理的檔案,也可以通過管道傳入數據。
sed [選項] '腳本命令' 檔案
基本選項
選項 | 描述 |
---|
-n | 禁止自動輸出,只有指定的行會被顯示。 |
-e | 允許在命令行中添加多個腳本命令。 |
-i | 直接修改原文件(就地編輯)。 |
-f | 從檔案載入腳本命令。 |
常用命令
命令 | 描述 |
---|
s/old/new/ | 替換操作,將 old 替換為 new。 |
d | 刪除匹配的行。 |
p | 列印匹配的行(與 -n 一起使用)。 |
a\text | 在當前行後追加文本 text。 |
i\text | 在當前行前插入文本 text。 |
c\text | 替換匹配行的內容為 text。 |
q | 提前退出,停止處理後續行。 |
示例
- 將 file.txt 中的第一處 old 替換為 new:
sed 's/old/new/g' file.txt
sed '2d' file.txt
- 在第 3 行後插入文本 This is a new line:
sed '3a\This is a new line' file.txt`
- 在第 3 行前插入文本 This is an inserted line:
sed '3i\This is an inserted line' file.txt
- 將第 2 行的內容替換為 This is the new content:
sed '2c\This is the new content' file.txt
sed -n '/pattern/p' file.txt
sed '1d; s/foo/bar/' file.txt
- 直接修改 file.txt,將所有 old 替換為 new:
sed -i 's/old/new/g' file.txt
sed '2,4d' file.txt
- 將 script.sed 中的命令應用於 file.txt:
sed -f script.sed file.txt