文本過濾工具
正規表達式:一種用來描述文本模式的特殊文法,由普通字元(例如字元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列印空行