grep sed awk

linux文本處理grep、sed、awk

grep


grep [options] PATTERN [FILE]

grep 選項 解釋
-
- 正則表達式的選擇
- -E, –extended-regexp 擴展的正則表達式,同命令egrep(已廢棄),字符`? + { }
- -G, –basic-regexp 基本正則表達式,grep默認執行,字符`? + { }
- -F, –fixed-regexp 所有搜索都是普通字符串,不進行正則匹配
- -P, –perl-regexp 使用Perl正則表達式
- -e, –regexp=PATTERN 用PATTERN來匹配
- -f, –file=FILE 指定規則文件
- -i, –ignore-case 忽略大小寫
- -w, –word-regexp 強制PATTERN僅完全匹配字詞
- -x, –line-regexp 強制PATTERN僅完全匹配一行
-
- 雜項
- -s, –no-messages 不顯示錯誤信息
- -v, –invert-match 選中不匹配的行
-
- 輸出控制
- -m, –max-count=NUM NUM次匹配後停止
- -b, –byte-offset 輸出的同時打印字節偏移
- -n, –line-number 輸出的同時打印行號
- -H, –with-filename 輸出同時打印文件名
- -o, –only-matching 僅輸出匹配的部分
- -d, –directories=ACTION 讀取目錄的方式,read/recurse/skip
- -r, –recursive --directories=recurse
- -l, –files-with-matches 僅打印匹配的文件名
- -L, –files-without-matches 僅打印不匹配的文件名
-
- 文件控制
- -B, –before-context=NUM 打印匹配文本及前NUM行
- -A, –after-context=NUM 打印匹配文本及後NUM行
- -C, –context=NUM 打印匹配文本的前後NUM行

sed


sed (stream editor),sed是一個流編輯器,sed把讀入的文本,通過一系列編輯命令轉換爲另一種格式輸出。

sed不會改變源文件。

  • sed的命令格式
sed option 'script' file1 file2 ...
sed option -f scriptfile file1 file2 ...

sed處理的文件既可以由標準輸入重定向得到,也可以當命令行參數傳入,命令行參數可以一次傳入多個文件,sed會依次處理。sed的編輯命令可以直接當命令行參數傳入,也可以寫成一個腳本文件然後用-f參數指定。

  • sed的執行的方式
/pattern/action

pattern是正則表達式,action是編輯操作。sed程序一行一行讀出待處理文件,如果某一行與pattern匹配,則執行相應的action,如果一條命令沒有pattern而只有action,這個action將作用於待處理文件的每一行。

  • 常用選項
sed 選項 解釋
- -n 取消打印模式空間
- -r 使用擴展的正則表達式,sed默認運行基本正則匹配
- -s 將輸入文件視爲各個獨立的文件而不是一個長的連續輸入
- -u 從輸入文件中讀取最少的數據,更頻繁的刷新輸出
- -f = FILE 指定腳本文件
- -e = EXP 指定腳本
- -i 直接修改文件的內容

模式空間: 當前sed處理的行

  • 常用命令
格式 含義
a 新增, a 的後面可以接字串,而這些字串會新增在匹配行的下一行
i 插入, i 的後面可以接字串,而這些字串會插入到匹配行的上一行
c 取代, c 的後面可以接字串,這些字串取代匹配行
d 刪除, d 後面通常不接任何東西
p 打印,通常 p 會與 -n 選項一起使用
s 替換,s替換
- -
/pattern/p 打印匹配pattern的行
/pattern/d 刪除匹配pattern的行
/pattern/s/pattern1/pattern2/ 查找符合pattern的行,將該行第一個匹配pattern1的字符串替換爲pattern2
/pattern/s/pattern1/pattern2/g 查找符合pattern的行,將該行所有匹配pattern1的字符串替換爲pattern2
- -
- 數字可作爲行數的索引地址,用逗號分隔
sed ‘1,10d’ a.txt 刪除1-10

awk


sed以行爲單位處理文件,awk比sed強的地方在於不僅能以行爲單位還能以列爲單位處理文件。

awk缺省的行分隔符是換行,缺省的列分隔符是連續的空格和Tab,但是行分隔符和列分隔符都可以自定義。

awk是一門很複雜的腳本語言,但基本用法和sed類似,它可以運行基本運算和流程控制。

  • awk命令的基本形式
awk option 'script' file1 file2 ...
awk option -f scriptfile file1 file2 ...
  • awk的執行方式
/pattern/{actions}
condition{actions}

如果某一行與pattern匹配,或者滿足condition條件,則執行相應的actions,如果一條awk命令只有actions部分,則actions作用於待處理文件的每一行。
- awk需要熟悉的用法

awk常用的內置變量

變量 含義
FILENAME 當前輸入文件的文件名,該變量是隻讀的
NR 當前行的行號,該變量是隻讀的,R代表record
NF 當前行所擁有的列數,該變量是隻讀的,F代表field
OFS 輸出格式的列分隔符,缺省是空格
FS 輸入文件的列分融符,缺省是連續的空格和Tab
ORS 輸出格式的行分隔符,缺省是換行符
RS 輸入文件的行分隔符,缺省是換行符
$0 當前整行的內容
1  2 … 第一列 第二列 …
BEGIN { … } 在整個文件處理之前執行一次
END { … } 在整個文件處理完成後執行一次

awk常用選項

awk 選項 解釋
- -f,–file=progfile 指定awk腳本文件
- -F,–field-separator=fs 重新指定輸入文件的列分隔符 awk -F : ...
- -v var = value 賦值一個變量 awk -v x=1 ...

變量

awk可以使用變量,但是不需要定義,第一次使用的時候回自動定義變量,變量是全局的。

格式化輸出

awk支持printf格式化輸出。

$ awk -v x=0 -F '[:, ]' 'BEGIN{OFS="!"} {print $1,$2,$3,$4; x++} END {print x "lines"}' a.txt

## -v 聲明一個變量並賦值
## -F 指定輸入文件的列分隔符,用[]指定多個分隔符
## OFS='!' 指定輸出分隔符爲!
## END 輸出行數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章