grep sed gawk的常見用法

2021-09-20 15:38:23 字數 3236 閱讀 9318

grep [選項] 『模式』 檔案

選項:

-o:僅顯示匹配到的行

-v:僅顯示未匹配到的行

-q:靜默模式,不輸出資訊

-i:忽略大小寫匹配

-a #:多匹配後#行

-b #:多匹配前#行

-c #:多匹配前後#行

-e:使用擴充套件正規表示式

--color=auto:匹配到的內容自動著色

模式:

單個字元匹配:

.:單個任意字元

:範圍內的字元,如[a-z],[0-9]等

[^]:取反

常用字符集:[:digit:],[:lower:],[:alpha:],[:upper:],[:space:],[:alnum:]

匹配次數:

\*:匹配前面字元任意次

.*:任意長度的任意字元

\?:匹配前面字元0或1次

\+:匹配前面字元至少一次

\:匹配前面字元n次

\:匹配前面字元至少n次,最多m次

\:匹配前面字元最少n次

位置錨定:

^:行首

$:行尾

\<:詞首

\>:詞尾

分組: \(\):將匹配條件寫在括號內,後可以使用\1,\2引用

檔案:可跟檔名或使用管道符作為標準輸入

例子:匹配1-255之間的數字

# ifconfig | grep -o --color=auto '\<\([1-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\>'
擴充套件正規表示式:

egrep [選項] 『模式』 引數

與標準正規表示式相比,除詞首詞尾錨定外,均不需要 \ 轉譯,但仍然使用 \# 來引用前面第#個( )內匹配到的內容。

上面例子使用擴充套件正規表示式如下

ifconfig | egrep -o --color=auto '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'

行編輯器,從檔案或標準輸入逐行讀取內容到模式空間,根據命令對此作出相應處理。另外還有保持空間可以提供乙個緩衝區,可利用此緩衝區與模式空間結合使用進行更高階的控制。

sed [選項] 『指令碼』 檔案

選項:

-n:不輸出資訊至螢幕

-r:支援擴充套件正規表示式

指令碼:『addresscommand』

#:特定某一行

/pattern/:被模式匹配到的所有行

#,#:從某一行到某一行

/pat1/,/pat2/:從第一次被pat1匹配到的行到之後第一次被pat2匹配到的行

#,+#:從某行到後面的幾行

1~2:步進,從1行開始,每兩行讀取一次

注:靈活組合使用,不僅限於此

命令: d:刪除

p:顯示模式空間中的行

a \string:在行後追加行,支援\n多行追加

i \string:在行前插入行,支援\n

w /path:模式空間的行寫入檔案

r /path:將檔案讀入到模式空間的行後

!:取反條件

s///:查詢替換,支援g,p,w /path

=:列印行號

g:從保持空間讀取內容覆蓋至模式空間

g:從保持空間讀取內容追加至模式空間

h:模式空間內容覆蓋至保持空間

h:模式空間內容追加至保持空間中

x:模式空間與保持空間內容互換

d:刪除多行模式空間中的所有行

例子:

sed -n 'n;p' /etc/passwd    #顯示偶數行

sed -n '1!g;h;$p' /etc/passwd #逆序列印文字內容

sed '$!n;$!d' #取出最後兩行

gawk [選項] 『程式』 檔案

選項:

-v:定義變數或內建變數賦值

-f ' ':指定輸入分隔符,等同於-v fs=' '

內建變數:

fs:輸入分隔符變數,預設為空格

ofs:輸出分隔符變數,預設為空格

rs:輸入換行符

ors:輸出換行符

nf:字段數量

nr:行號,多檔案時一併統計

fnr:行號,多檔案時分別統計

filename:當前檔名

argc:命令引數個數

ar**:命令引數陣列

begin:文字處理之前執行裡的**

end:文字處理完成之後執行裡的**

/pattern/:僅對匹配到的行執行裡的**

/pattern1/,/pattern2/:對第一次被pattern1匹配到的行至之後第一次被pattern2匹配到的行之間所有行執行裡的**

程式: #引用字段使用$1 ,$2等,引用變數不需$

print nf #列印當前行欄位數量

print $nf #列印當前行最後字段

#參考c語言printf函式用法,支援 %-10s,%3.1f 這類用法

#參考c語言用法,相當於if語句

對於陣列:使用for(varname in arrayname),使變數遍歷陣列所有元素下標進行操作

關聯陣列:使用字串索引陣列元素。如 array["str"]=1,可利用此特性統計字串、數值等值重複次數

算術運算:+,-,*,/,%,^,++,--

賦值運算:=,+=,-=,*=,/= 等

數值比較:>,>=,==,<,<=

迴圈支援 break 與 continue,另外,使用 next 提前結束當前行進入下一行操作

常用函式:length(strname),返回字串長度;

split(strname, arrayname, r),以r為分隔符分割字串strname並儲存結果至arrayname陣列

例子:統計ss -tan命令顯示結果中各種狀態出現的次數

ss -tan | gawk 'begin ;count[$1]++} end }'

API之NSDictionary的常見用法

nsdictionary dic1 nsdictionary alloc initwithobjectsandkeys 李四 name 不明 gender nil 字典中的物件可以重複儲存 71 instancetype initwithobjectsandkeys id firstobject,n...

遞迴演算法常見用例

1.遞迴逆序列印字串 void reverse char s 2.遞迴方式將鍊錶逆序 p 為指向非空單鏈表中第乙個結點的指標,本演算法逆轉鍊錶並返回逆轉後的頭指標。基本思路是 如果鍊錶中只有乙個結點,則空操作,否則先逆轉a2開始的鍊錶,然後將 a1聯接到逆轉後的鍊錶的表尾 即a2 之後。linkli...

numpy和pandas 各種比較常見的用法總結

經常會遇到np.reshape a,1 或者np.reshape 1,a 這樣的情況 a 1,2,3,4,5 1是乙個比較神奇的功能,意思是我只要確定需要分成a行後者a列,剩下的資料你隨便分,反正結果都一樣。例 arr np.array 1,2,3,4,5,6,7,8,9,10,11,12 乙個一維...