天天看點

shell 學習筆記2

文本過濾工具

正規表達式:一種用來描述文本模式的特殊文法,由普通字元(例如字元A-Z)以及特殊字元(稱為元字元,如/ . * ?等)組成比對字元串。

文本過濾工具在某種模式下都支援正規表達式。

#基本元字元

 ^ 隻比對行首

 $ 隻比對行末

 * 比對0個或多個單字元

 [] 隻比對[]内字元,可以是單個字元,也可以是字元序列,可以使用-表示範圍,如[1-5]表示[12345].

 \ 用來屏蔽元字元的含義

 . 隻比對任意單字元

 pattern\{n\} 比對pattern出現的次數,n代表次數

 pattern\{n,\} 比對pattern至少出現n次

 pattern\{n,m\} 比對pattern出現的次數在n-m之間。

 #example

  ...x..x..x

  drwxrwxrwx 比對

  -rwxrwxrwx 

  -rwxr-xr-x 不比對

#特殊字元

 "   '   || ^ * +

 \*\.pas  比對以*.pas結尾的所有字元或檔案

 A\{2\}B    AAB

 A\{2,\}B AAB AAAB

 A\{2,4\}B AAB AAAAB AAAB

#Find

 find pathname [option] [-print -exec -OK]

  -print 标準輸出到螢幕

  -exec 後接指令。'command' {} \ ; 執行前不提示确認

  -ok  執行前提示确認

 option參數:

  -name 後跟檔案名稱,按檔案名查找

  -perm 後跟權限,按權限查找

  -user 後跟使用者名,按檔案屬主查找

  -group 後跟組名,按檔案所屬的使用者組查找

  -nouser 後跟使用者名,查找無效使用者的檔案

  -nogroup 後跟組名,查找無效使用者組的檔案

  -mtime -n +n -n為N天以内修改的檔案,+n為N天以前修改的檔案

  -type 後跟檔案類型,按檔案類型查找

  -size 後跟數字,按大于或小于這個大小查找檔案

   find . -size +1000000c -print  c代表位元組  大于1M

   find . -size +10000 -print  大于10塊

  -depth 先比對檔案,再在安的子目錄中查找。

  -newer  按檔案修改時間查找,比較兩個檔案的新舊程式。

  -exec 将前面執行的結果傳遞給後面的指令。

   find /var/log/ -name "*.log" -mtime +5 -OK rm {} \;

  -xargs

   find ./ -perm 7 -print |xargs chmod o-w   将前面找到的檔案所屬其它組的使用者權限-w

#grep [option]正規表達式[檔案]

#-option

-c 顯示比對行數

-n 顯示比對的行及行号

-h 查詢多檔案時不顯示檔案名

-H 查詢檔案時顯示檔案名

-i 不區分大小寫

-v 顯示不包比對文本的所有行

-l 查詢多檔案時隻輸出包含比對字元的檔案名。

grep "jenny" *.txt  在所有txt檔案中查詢

^[^210]非210頭的

[[:upper:]]    [A-Z]

[[:alnum:]]    [0-9a-zA-Z]

[[:lower:]]    [a-z]

[[:space:]]    [空格或tab鍵]

[[:digit:]]    [0-9]

[[:alpha:]]    [a-zA-Z]

grep [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}

#awk

#awk [-F filed-spearator] 'command' input-files  指令方式調用  filed-spearatorl輸出分隔符,預設為空格。

#包括模式和動作,動作放在大括号中{}一般為print,分隔符、域和記錄。域表示為:$1 $2 $n

#awk腳本調用

awk '{print $0}' xxx.txt |tee xxx.file   列印xxx.txt檔案所有的域并輸出為檔案xxx.file

awk '{print $1 "\t" $4}' xxx.txt 列印xxx.txt檔案的第一個域和第4個域,并以Tab分開

awk 'begin {print "NAME Maths\n-------"} {print $ "\t" $4} end {"end-of-report"}' xxx.txt  輸出為以下格式:

NAME Maths

-----------------

xxx     xxx

…… ……

end-of-report

#awk

#特殊元字元:+,?

~表示比對,!~表示不比對

cat xxx.txt |awk '$0 ~/xxx/'

cat xxx.txt |awk '$0 !~/xxx/'

awk '{if($1=="xxx")print $0}' xxx.txt

#sed

#sed [option] sed指令 輸入檔案

#sed [選項] -f sed腳本檔案 輸入檔案

#sed腳本檔案 [選項] 輸入檔案

#-n不列印 p列印比對行

-c 下一指令是編輯指令

-f 正在調用sed腳本檔案

x    行号

x,y  行号範圍從x到y

/pattern/ 查詢包含模式的行

/pattern/pattern  查詢包含兩個模式的行

pattern/,x 在給定的行号上查詢包含模式的行

x,/pattern/ 通過行号和模式查詢比對的行

x,y!    查詢不包含指定等号x和y的行

#基本sed編輯指令

p  列印比對行

=  顯示檔案行号

a\ 在定位行号後附加新文本資訊

i\ 在定位行号後插入新文本資訊

d 删除定位行

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

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

r 從另一個檔案中讀取文本輸入到目前比對到行中

w 寫文本到别一個檔案

q 第一個模式比對後立即退出

l 顯示與八進制ASCII代碼等價的控制字元

{} 在定位行執行指令組

n 從另一個檔案中讀文本下一行,并附加在比對行的下一行

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

y 傳送字元

#example

sed -n '2p' xxx.txt  列印xxx.txt第二行資訊

sed -n '1,4p' xxx.txt 列印xxx.txt的1-4行

sed -n '/los/p' xxx.txt 列印比對模式los的行

sed -n '4,/los/p' xxx.txt 列印第4行開始比對los模式結束

sed -n '/^$/=' xxx.txt列印空行