1. 程式人生 > >grep&awk&sed基本引數

grep&awk&sed基本引數

grep&awk&sed基本引數

grep說明

grep命令是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。

 

格式:grep [options]

主要的引數:

-c:只輸出匹配行的計數。
-i:不區分大 小寫(只適用於單字元)。
-h:查詢多檔案時不顯示檔名。
-l:查詢多檔案時只輸出包含匹配字元的檔名。
-n:顯示匹配行及 行號。
-s:不顯示不存在或無匹配文字的錯誤資訊。
-v:顯示不包含匹配文字的所有行。

pattern正則表示式

主要引數:

\: 忽略正則表示式中特殊字元的原有含義。
^:匹配正則表示式的開始行。
$: 匹配正則表示式的結束行。
\
<</span>:從匹配正則表達 式的行開始。 \>:到匹配正則表示式的行結束。 [ ]:單個字元,如[A]即A符合要求。 [ - ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求。 .:所有的單個字元。 * :有字元,長度可以為0。

awk說明

       awk是一種程式語言,用於在linux/unix下對文字和資料進行處理。資料可以來自標準輸入、一個或多個檔案,或其它命令的輸出。它支援使用者自定義函式和動態正則表示式等先進功能,是linux/unix下的一個強大程式設計工具。它在命令列中使用,但更多是作為指令碼來使用。

       awk的處理文字和資料的方式:它逐行掃描檔案,從第一行到最後一行,尋找匹配的特定模式的行,並在這些行上進行你想要的操作。如果沒有指定處理動作,則把匹配的行顯示到標準輸出(螢幕),如果沒有指定模式,則所有被操作所指定的行都被處理。

       awk分別代表其作者姓氏的第一個字母。因為它的作者是三個人,分別是Alfred Aho、Brian Kernighan、Peter Weinberger。

       gawk是awk的GNU版本,它提供了Bell實驗室和GNU的一些擴充套件。下面介紹的awk是以GUN的gawk為例的,在linux系統中已把awk連結到gawk,所以下面全部以awk進行介紹。

awk命令格式和選項

awk的語法有兩種形式

       awk [options] 'script' var=value file(s)

       awk [options] -f scriptfile var=value file(s)

 

命令選項:

-F fs or --field-separator fs :指定輸入檔案折分隔符,fs是一個字串或者是一個正則表示式,如-F:。
-v var=value or --asign var=value :賦值一個使用者定義變數。
-f scripfile or --file scriptfile :從指令碼檔案中讀取awk命令。
-mf nnn and -mr nnn :對nnn值設定內在限制,-mf選項限制分配給nnn的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴充套件功能,在標準awk中不適用。
-W compact or --compat, -W traditional or --traditional :在相容模式下執行awk。所以gawk的行為和標準的awk完全一樣,所有的awk擴充套件都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright :列印簡短的版權資訊。
-W help or --help, -W usage or --usage :列印全部awk選項和每個選項的簡短說明。
-W lint or --lint :列印不能向傳統unix平臺移植的結構的警告。
-W lint-old or --lint-old :列印關於不能向傳統unix平臺移植的結構的警告。
-W posix :開啟相容模式。但有以下限制,不識別:/x、函式關鍵字、func、換碼序列以及當fs是一個空格時,將新行作為一個域分隔符;操作符**和**=不能代替^和^=;fflush無效。
-W re-interval or --re-inerval :允許間隔正則表示式的使用,參考(grep中的Posix字元類),如括號表示式[[:alpha:]]。
-W source program-text or --source program-text :使用program-text作為原始碼,可與-f命令混用。
-W version or --version :列印bug報告資訊的版本。

模式和操作

awk指令碼是由模式和操作組成的:

        pattern {action} 如$ awk '/root/' test,或$ awk '$3 < 100' test。

       兩者是可選的,如果沒有模式,則action應用到全部記錄,如果沒有action,則輸出匹配全部記錄。預設情況下,每一個輸入行都是一條記錄,但使用者可通過RS變數指定不同的分隔符進行分隔。

 

1.模式

模式可以是以下任意一個:

1)正則表示式:使用萬用字元的擴充套件集。

2)關係表示式:可以用下面運算子表中的關係運算符進行操作,可以是字元(3)串或數字的比較,如$2>%1選擇第二個欄位比第一個欄位長的行。

4)模式匹配表示式:用運算子~(匹配)和~!(不匹配)。

5)模式,模式:指定一個行的範圍。該語法不能包括BEGIN和END模式。

6)BEGIN:讓使用者指定在第一條輸入記錄被處理之前所發生的動作,通常可在這裡設定全域性變數。

7)END:讓使用者在最後一條輸入記錄被讀取之後發生的動作。

 

2. 操作

       操作由一人或多個命令、函式、表示式組成,之間由換行符或分號隔開,並位於大括號內。主要有四部份:

1)變數或陣列賦值

2)輸出命令

3)內建函式

4)控制流命令

awk運算子

 

運算子

描述

= += -= *= /= %= ^= **=

賦值

?:

C條件表示式

||

邏輯或

&&

邏輯與

~ ~!

匹配正則表示式和不匹配正則表示式

< <= > >= != ==

關係運算符

空格

連線

+ -

加,減

* / &

乘,除與求餘

+ - !

一元加,減和邏輯非

^ ***

求冪

++ --

增加或減少,作為字首或字尾

$

欄位引用

in

陣列成員


uniq 去除重複命令
 

命令選項:

-c:輸出重複行的重複次數
-d:盡輸出重複的行
-f:忽略一些欄位,只比較制定欄位
-i:忽略大小寫
-d:忽略一些字元,只比較指定的字元
-u:輸出不重複行
-w:制定要比較字元位置

sort 排序命令

命令選項:

-b   忽略每行前面開始出的空格字元。
-c   檢查檔案是否已經按照順序排序。
-d   排序時,處理英文字母、數字及空格字元外,忽略其他的字元。
-f   排序時,將小寫字母視為大寫字母。
-i   排序時,除了040至176之間的ASCII字元外,忽略其他的字元。
-m   將幾個排序好的檔案進行合併。
-M   將前面3個字母依照月份的縮寫進行排序。
-n   依照數值的大小排序。
-o <輸出檔案>   將排序後的結果存入指定的檔案。
-u  輸出行中刪除重複項
-r  以相反的順序來排序。
-k 指定排序列數。
-t<分隔字元>   指定排序時所用的欄位分隔字元。
+<起始欄位>-<結束欄位>   以指定的欄位來排序,範圍由起始欄位到結束欄位的前一欄位。

sed說明

sed是非互動式的編輯器。它不會修改檔案,除非使用shell重定向來儲存結果。預設情況下,所有的輸出行都被列印到螢幕上。

sed編輯器逐行處理檔案(或輸入),並將結果傳送到螢幕。具體過程如下:首先sed把當前正在處理的行儲存在一個臨時快取區中(也稱為模式空間),然後處理臨時緩衝區中的行,完成後把該行傳送到螢幕上。sed每處理完一行就將其從臨時緩衝區刪除,然後將下一行讀入,進行處理和顯示。處理完輸入檔案的最後一行後,sed便結束執行。sed把每一行都存在臨時緩衝區中,對這個副本進行編輯,所以不會修改原檔案。

 

# sed [-nefr] [動作]

選項與引數:

-n:使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的資料一般都會被列出到終端上。但如果加上 -n 引數後,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。
-e:直接在命令列模式上進行 sed 的動作編輯;
-f:直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的 sed 動作;
-r:sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
-i:直接修改讀取的檔案內容,而不是輸出到終端。

動作說明: [n1[,n2]]function

n1, n2:不見得會存在,一般代表『選擇進行動作的行數』,舉例來說,如果我的動作是需要在 1020 行之間進行的,則『 10,20[動作行為] 』

function:
a:新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c:取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
d:刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚;
i:插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p:列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行~
s:取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!