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