Linux文本過濾命令grep、awk、sed


grep的使用:

一、grep一般格式:

grep [選項] 基本正則表達式 [文件]

這里的正則表達式可以為字符串。在grep命令中輸入字符串參數時,最好將其用雙引號括起來。調用變量時也可以使用雙引號。在調用模式匹配事,應使用單引號。

二、grep常用選項:

-c只輸出匹配行的計數。

-i不區分大小寫(只用於單字符)。

-h查詢多文件時不顯示文件名。

-l查詢多文件時只輸出包含匹配字符的文件名。

-n顯示匹配行及行號。

-s不顯示不存在或無匹配文本的錯誤信息。

-v顯示不包含匹配文本的所有行。

三、常用選項的使用:

1、 查詢多個文件:

$grep  “hello” *.doc

num.doc:hello

sum.doc:hello world

  說明在num.doc 和sum.doc中有字符串“hello“。

2、 行匹配:

$grep -c “123” *.doc

num.doc:2

sum.doc:2

說明在num.doc 和sum.doc中有字符串“123“各為兩行。

3、 顯示滿足匹配模式的所有行數:

$grep –n “123” *.doc

num.doc:1:hao 123

num.doc:2:hao 123

sum.doc:2:hao 123

sum.doc:4:hao 1234

4、 顯示所有不包含“123“的行:

$grep  -v “123” *.doc

num.doc:hello

num.doc:world

sum.doc:hello world

sum.doc:sui yue

5、 精確匹配:

如第三點,匹配“123”時,結果返回了“1234”的其它字符串。

$grep -n “123\>” *.doc

num.doc:1:hao 123

num.doc:2:hao 123

sum.doc:2:hao 123

6、 大小寫敏感:

缺省情況下,grep是大小寫敏感的,如果要查詢大小寫不敏感的字符串,必須

使用-i選項。

$grep -i “just” *.doc 

num.doc:Just

num.doc:just

四、grep和正則表達式

1、模式范圍:

$ grep  ‘48[34]’ mydata.doc

此命令在mydata.doc中匹配字符串“483”和“484”。

2、 不匹配行首:

$ grep  ‘^[^48]’ mydata.doc

此命令在mydata.doc中匹配除4或者8開頭的行。

3、 設置大小寫:

$ grep  ‘[Ss]ept’  mydata.doc

此命令在mydata.doc中匹配字符串“Sept”和“sept”。

4、匹配任意字符:

$ grep  ‘a…z’ mydata.doc

此命令在mydata.doc中匹配字符串以字符a開頭和字符z結尾,中間為任意三個字符。

5、 模式出現的機率

$ grep ‘1\{2,\}’ mydata.doc

此命令說明數字1至少出現兩次

awk的使用:

一、awk的調用格式:

awk的調用格式有三種:

第一種是命令行的方式,如下:

awk [-F field-separator] ‘commands’ input-file

[-F]域分隔符,是可選的,awk使用空格作為缺省的域分隔符。

第二種方法是將awk命令插入到一個文件,並使awk程序可以執行,然后用awk命令解釋器作為腳本的首行,以便通過鍵入腳本名稱來調用它。

第三種方法是將所有的awk命令插入一個單獨文件,然后調用:

awk –f awk-script-file input-file

二、動作和模式

任何awk語句都有模式和動作組成。模式部分決定動作語句何時觸發及觸發事件。

模式包括兩個特殊字段BEGIN和END.,BEGIN語句使用在任何文本瀏覽動作之前,之后文本瀏覽動作依據輸入文件開始執行,END語句用來在awk完成文本瀏覽動作后打印輸出文本中輸出和結尾狀態標志。實際動作在大括號內指明。

三、域和記錄

awk執行時,其瀏覽域標記為$1,$2 ….$n.。這種方法稱為域標識。

 1、保存awk輸出

第一種方法:

$awk ‘{print $0}’ mydata.txt >newfile.txt

顯示屏上不會輸出結果。

第二種方法:

$awk ‘{print $0}’ mydata.txt | tee newfile.txt

輸出到文件中,同時顯示在顯示器上。

2、使用標准輸入

第一種方法:使用awk腳本輸入文件格式

$myawk.awk inputfile.txt

第二種方法:使用重定向

$myawk.awk < inputfile.txt

第三種方法:使用管道

$inputfile.txt | myawk.awk

3、打印所有記錄

$awk ‘{print $0}’ myfile.txt

由於沒有模式部分,只有動作部分,動作必須用花括號括起來。

Lisi 25 wuhan

Wangjian 33 shanghai

Caiming 55 shenzhen

4、打印單獨記錄

要用逗號分隔域

$awk ‘{print $1,$2}’ myfile.txt

Lisi 25

Wangjian 33

Caiming 55

5、打印報告頭

$awk ‘BEGIN {print “Name Age\n******************“} {print $1”\t”$2}’ mfile.txt

Name Age

***************

Lisi25

Wangjian 33

Caiming 55

6、打印信息尾

$awk ‘BEGIN {print “Name \n****** “} {print $1 } END {“end of report\n”}’ mfile.txt

sed的使用:

一、sed調用格式

sed調用格式有三種:

第一種命令行方式:

sed [option] ‘command’ inputfile

command要加單引號,也允許加雙引號。

第二種使用sed腳本文件:

sed  [option]  –f  sed-script-file inputfile

第三種使用第一行具有sed命令解釋器的sed腳本文件:

sed-script-file [option] inputfile

二、sed選項:

n 不打印:sed不寫編輯行到標准輸出,缺省為打印所有行。P命令可以用來打印編輯行。

c 下一命令是編輯命令。使用多項編輯時加入選項。

f 如果正在調用sed腳本文件,使用此選項。此選項通知sed腳本文件支持所有的sed命令。

三、sed常規用法:

1、 保存sed 輸出

$ sed  ‘command’ inputfile > outfile

2、 sed在文件中查找文本的方式

sed瀏覽文件時,默認從第一行開始,有兩種方法定位文本:

第一種:使用行號,可以用簡單數字或是一個行號范圍。

第二種:使用正則表達式。

Sed定位文本的一些方式,如下:

x x表示行號。 

x,y 表示行號范圍從x到y。 

/pattern/ 查找包含模式的行。 

x,/pattern 通過行號和模式查詢匹配行。 

x,y! 查找不包含指定行號x到y的行。 

3、 sed編輯命令

p 打印匹配行 

= 顯示文件行號 

a\ 在定位行號后附加拳文本信息 

i\ 在定位行號后插入拳文本信息 

d 刪除定位行 

c\ 用拳文本替換定位文本 

s 使用替換模式替換相應模式 

r 從另一個文件中讀文本 

w 寫文本到一個文件 

q 第一個模式匹配完成后推出或立即推出 

l 顯示與八進制ASCII代碼造價的控制字符 

{} 在定位行執行的命令組 

n 從另一個文件中讀文本下一行,並附加在下一行 

g 將模式2粘貼到/pattern n/ 

y 傳送字符 

n 延續到下一輸入行;允許跨行的模式匹配語句。 

4、 使用p顯示行

$sed -n ‘2p’ myfile.txt

Hello world!

-n選項,顯示打印定位行。

5、 打印范圍

$sed -n ‘1,3p’ myfile.txt

Hao 123

Hello world!

Ni hao ma?

打印1到3行。

6、 打印模式

$sed -n ‘/123/’p myfile.txt

Hao 123

7、 在指定行號匹配模式

$sed -n ‘5,/Hao/’p myfile.txt

Hao ma?

 

參考:

http://blog.csdn.net/u010666884/article/details/51381947(以上內容轉自此篇文章)

http://blog.csdn.net/halazi100/article/details/42266885

http://blog.csdn.net/hzylmf/article/details/13712753

http://blog.csdn.net/u011068702/article/details/60882902


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM