9.1 正則介紹_grep上
9.2 grep中
9.3 grep下
擴展
把一個目錄下,過濾全部*.php文檔中含有eval的行
grep -r --include="*.php" 'eval' /data/php
Linux 系統添加操做記錄審計shell
mkdir -p /usr/local/domob/records/ //存放目錄編程
chmod 777 /usr/local/domob/records/ //給權限bash
chmod +t /usr/local/domob/records/ //給t權限防止別人刪除dom
vi /etc/profile 在最後添加下面的代碼編程語言
if [ ! -d /usr/local/domob/records/${LOGNAME} ] LOGNAME //每一個用戶的用戶名,判斷在不在 ,不在的話,建立spa
then.net
mkdir -p /usr/local/domob/records/${LOGNAME}3d
chmod 300 /usr/local/domob/records/${LOGNAME}日誌
fi
export HISTORY_FILE="/usr/local/domob/records/${LOGNAME}/bash_history" //自定義變量
export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'
http://blog.lishiming.net/?p=484 read講解
擴展正則: + ? () {} | 使用的話要用grep -E 或者egrep
PROMPT_COMMAND="cd /tmp/"
每次執行cd以前,都會執行cd /tmp/
什麼是正則
概念:它使用單個字符串來描述或匹配一系列符合某個句法則規則的字符串; 正則表示式一般用來檢索和替換那些符合某個模式的文本內容。 不管是查找某個文檔,仍是查詢某個日誌文件並分析其內容,都會用正則表示式。 正則就是一串有規則的字符串; 掌握好正則對於編寫shell腳本有很大幫助; 各類編程語言中都有正則,原理是同樣的。
命令格式:grep [-cinvrABC] 'word' filename
-c 過濾出來的行數 -i 不區分大小寫 -n 顯示行號 -v 取反 -r 遍歷全部的子目錄 -A 後面跟一個數字,過濾出符合要求的行以及下面的n行; 列出包含關鍵詞的行列出來,還會把如下的n行列出來。 -B 後面跟一個數字,過濾出符合要求的行及上面n行; -C 後面跟一個數字,同時過濾出符合要求的行及上下各n行。 -E使其支持擴展正則,等同於egr印
建立一個grep目錄,拷貝過來一個文件/etc/passwd:
grep 'nologin' passwd 過濾nologin 並標紅,grep --color=auto 有顏色顯示
grep -c 'nologin' passwd grep查看符合過濾結果的行數 -c
-n 顯示包含nologin的行號
grep -ni 'nologin' passwd -i不區分大小寫
grep -vni 'nologin' passwd 取反,把除了nologin的顯示出來 -v
grep -r 'root' /etc/ etc目錄下全部包含root的文件
grep -r 'root' /etc/ > /tmp/grep.log 把過濾出的結果重定向到grep.log
grep passwd /tmp/grep.log 在過濾結果中,過濾passwd
grep -A2 'root' passwd -A2 把包含root的行,還有這行下面的兩行都列出來
-B2 把包含root的行和這行上面的兩行都列出來
-C2把包含root的行和上下兩行都列出來
grep '[0-9]' passwd 查看文件裏的0-9全部的數字,[] 方括號表示裏面的任意一個字符
grep -vn '[0-9]' /etc/inittab -v 把不包含0-9的行列出來
grep -n '^#' inittab 把以#開頭的行列出來 ^ 以xxx開頭
grep -nv '^#' inittab 把不以#開頭的行列出來
grep -v '^#' inittab 把#開頭的行去掉
grep '[^0-9]' inittab 過濾非0-9,只要不是數字,都符合要求,一個字符
grep '^[^0-9]' inittab ^已xxx開頭,括號中已一個非數字的字符開頭,過濾出非0-9開頭的數字 ,^放到[] 方括號中,意味着方括號裏的字符的取反,和放在外面不一樣,外面是以xxx開頭
grep -nv '^[^0-9]' inittab 取反,包含0-9開頭的行 ,^放到[] 方括號中,意味着方括號裏的字符的取反,和放在外面不一樣,外面是以xxx開頭
grep 'r.o' passwd 匹配r.o . 表示任意一個字符,r.o表示r和o之間有一個任意字符的行過濾出來
grep 'o*o' passwd
*號表示左邊的字符,重複0到n次
grep '.*' passwd 任意個任意字符
grep 'user.*bash' passwd
grep 'o\{2\}' passwd 須要用\脫義,過濾出o出現兩次的內容,只要有兩個就會匹配出來
grep 'o\{0,3\}' passwd 從0到3的範圍,用的不多
egrep 'o{2}' passwd grep -E 'o{2}' passwd 若是不加轉譯字符,可使用egrep 或grep -E {}表示前面字符的重複範圍 grep -E '(oo){2}' passwd 出現兩次的oo
egrep 'o+b' passwd + 過濾出一個或多個指定的字符
egrep 'o?t' passwd ?表示 ?前面的字符的重複次數0或1,有的時候是ot,沒有的時候是t
| 或者,grep -E 'root|nologin' passwd 匹配root 或nologin
grep -Ei 'root|bus|81' passwd 能夠寫多個,用i不區分大小寫