一、find 命令
find 命令的常用形式可以簡化為
1 find [path...][expression]
- path:find 命令查找的目錄路徑,其中 ./ 表示當前目錄,/ 表示系統根目錄
- expression:可以分為
1 -options [-print -exec -ok ...]
-
- -options:指定 find 命令的常用選項
- -print:find 命令將匹配的文件輸出到標准輸出
- -exec:find 命名對匹配的文件執行該參數所給出的 shell 命令
- -ok:與 -exec 類似,只不過在執行每一個命令之前都會給出提示,讓用戶決定是否執行
1. find 命令的常用選項
- -name
按照文件名查找文件。
1 # 在當前目錄與子目錄下查找txt后綴的文件 2 find ./ -name "*.txt"
- -mtime -n +n
按照文件的更改時間來查找文件,-n 表示文件更改時間在 n 天之內,+n 表示文件更改時間在 n 天之外。
1 # 查找在當前目錄下2天內修改的文件 2 find ./ -mtime -2
- -newer file1
查找比文件 file1 新(即更改時間晚)的文件
1 # 查找當前目錄下比1.txt新的文件 2 find ./ -newer 1.txt
- -type
查找某一類型的文件,例如
d - 目錄
f - 普通文件
b - 塊設備文件
c - 字符設備文件
p - 管道文件
l - 符號鏈接文件
1 # 在當前目錄查找所以目錄文件 2 find ./ -type d
- -size n
查找大小為 n 的文件,末尾帶有 c 時表示文件大小以字節計,帶 k 時表示文件大小以 KB 計,以此類推。
1 # 查找當前目錄下大小大於10k的文件 2 find ./ -size +10000c
2. find 與 xargs 搭配
xargs 與 -exec 類似,對 find 命名匹配的文件執行該參數所給出的 shell 命令,並且效率更高。
1 # 查找當前目錄下所有文件並輸出文件類型 2 find . -type f -print | xargs file 3 4 # 查找當前目錄下所有txt文件並將結果輸出到txt.log文件,一行輸出一個結果 5 find . -name "*.txt" -print | xargs -n1 > /e/txt.log 6 7 # 查找當前目錄下的所有文件並在這些文件中搜索add_experience並將結果輸出到文件 8 find . -type f | xargs grep "add_experience" > /f/add_experience.txt 9 10 # 刪除3天以前的所有文件和文件夾 11 find ./ -mtime +3 -print | xargs rm -f -r 12 13 # 刪除文件大小為0的文件 14 find ./ -size 0 | xargs rm -f
二、grep 命令
grep 是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。它的命令格式一般為:
1 grep [option] "pattern" filename
- option 常見選項
- -c:只輸出匹配行的計數
- -i:不區分大小寫(只適用與單字符)
- -n:顯示匹配行及行號
- -s:不顯示不存在或無匹配文本的錯誤信息
- -v:顯示不包含匹配文本的所有行
- -o:只顯示文件中匹配到的部分
- -l:列出匹配的文件清單
- -L:列出不匹配的文件清單
- pattern:要搜索的關鍵字或正則表達式語句
- 要搜索的文件名
1.簡單使用
如下所示:
1 # 查找1.txt中存在aaa的行,並輸出行號 2 grep -n "aaa" 1.txt
2. 正則表達式
正則表達式主要元字符及使用如下表所示:
元字符 |
功能 |
例子 |
匹配什么 |
^ |
錨定行的開始 |
/^love/ |
匹配所有以love開頭的行 |
$ |
錨定行的結束 |
/love$/ |
匹配所有以love 結束的行 |
. |
匹配一個字符 |
/l..e/ |
匹配這樣的行,這些行包含這樣的字符:第一個字符是l,緊跟着兩個字符,然后是e |
* |
代表0個或多個先前字符 |
/*love/ |
匹配所有這樣的行,有0個或多個空格,空格后跟着love |
[] |
匹配字符組中的一個字符 |
/[Ll]ove/ |
匹配所有包含love或者Love的行 |
[^] |
匹配一個不在范圍內的字符 |
/[^A-Z]ove/ |
|
< |
錨定單詞的開始 |
<love |
匹配所有這樣的行,這些行包含以love開頭的單詞(vi和grep支持這個功能) |
> |
錨定單詞的結束 |
Love> |
匹配所有這樣的行,這些行包含以love結束的單詞(vi和grep支持這個功能) |
(..) |
標記后面用到的匹配字符 |
/(love)able1rs/ |
最多可以使用9個標簽。第一個標簽是模板最左邊的部分。在本例子中,模板love保存的標簽為1,后面的1指得就是love;本例子搜索的是這樣的行,這些行包含這樣的字符,在Loveabel后面跟着lovers |
x{m} |
M次復制字符x |
||
x{m,} |
至少m次復制字符x |
||
x{m,n} |
至少m次,至多n次復制字x |
||
w |
文字和數字字符,[A-Za-z0-9] |
Lw*e |
匹配一個L字符,緊跟着0個或多個文字或數字字符,然后是e |
W |
同上 |
||
b |
單詞分界線 |
bloveb |
僅僅匹配單詞love |
簡單使用如下:
1 # 搜索aaa開頭的行 2 grep -n '^aaa' 1.txt 3 4 # 搜索至少包含連續3個a的行 5 grep -n 'a\{3,\}' 1.txt 6 7 # 搜索包含aaa或者daa的行 8 grep -n '[ad]aa' 1.txt