目录
find命令
语法
参数说明
find中正则表达式的运用
grep命令
语法:
参数说明
grep中正则表达式的运用
实际使用案例
正文
find命令
语法
find是在一个文件系统中查找指定的文件或者目录,find命令的语法是
find [path ] [options]
path :指定要搜索的路径,如果省略则在当前路径下查找
参数说明
参数 | 含义 |
mount, -xdev |
只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件 |
-amin n |
在过去 n 分钟内被读取过 |
-anewer file |
比文件 file 更晚被读取过的文件 |
-atime n | 在过去 n 天内被读取过的文件 |
-cmin n | 在过去 n 分钟内被修改过 |
-cnewer file | 比文件 file 更新的文件 |
-ctime n | 在过去 n 天内创建的文件 |
-mtime n | 在过去 n 天内修改过的文件 |
-empty | 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name |
-ipath p, -path p |
路径名称符合 p 的文件,ipath 会忽略大小写 |
-name name, -iname name |
文件名称符合 name 的文件。iname 会忽略大小写 |
-size n |
文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。 |
type c | 文件类型是 c 的文件。 |
find中正则表达式的运用
#将当前目录及其子目录下所有文件后缀为 .c 的文件列出来: find . -name "*.c" #将当前目录及其子目录中的所有文件列出: find . -type f #将当前目录及其子目录下所有最近 20 天内更新过的文件列出: find . -ctime 20 #查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们: find /var/log -type f -mtime +7 -ok rm {} \; #查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件: find . -type f -perm 644 -exec ls -l {} \; #查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径: find / -type f -size 0 -exec ls -l {} \;
grep命令
grep(egrep)用来在一个文本文件(字符串)查找一个特定的字符串的。egrep 是用扩展的正则表达式去查找
语法:
grep options [正则表达式] files
在files列举的所有文件里面,查找以正则表达式所描述的字符串
参数说明
-n 显示查找到的字符串所在的行号
-E 用扩展的正则表达式
grep -E ==>egrep
-i ignore 在字符串查找时忽略大小写
-i "main"
[mM][aA][iI][nN]
-# 表示同时显示匹配的上下#行
-c count 打印每个文件匹配行的个数
-H 显示文件名
-h 不显示文件名
grep中正则表达式的运用
grep test *file #在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行 grep -r update /etc/acpi #查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容 grep -v test *test* #反向查找,查找文件名中包含 test 的文件中不包含test 的行
实际使用案例
[a-z] // 匹配所有的小写字母 [A-Z] // 匹配所有的大写字母 [a-zA-Z] // 匹配所有的字母 [0-9] // 匹配所有的数字 [0-9\.\-] // 匹配所有的数字,句号和减号 [ \f\r\t\n] // 匹配所有的白字符 [^a-z] //除了小写字母以外的所有字符 [^\\\/\^] //除了(\)(/)(^)之外的所有字符 [^\"\'] //除了双引号(")和单引号(')之外的所有字符 ^[a-zA-Z0-9_]{1,}$ // 所有包含一个以上的字母、数字或下划线的字符串 ^[1-9][0-9]{0,}$ // 所有的正整数 ^\-{0,1}[0-9]{1,}$ // 所有的整数 ^[-]?[0-9]+\.?[0-9]+$ // 所有的浮点数
正则表达式 | 描述 |
/\b([a-z]+) \1\b/gi | 一个单词连续出现的位置。 |
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ | 匹配一个 URL 解析为协议、域、端口及相对路径。 |
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ | 定位章节的位置。 |
/[-a-z]/ | a 至 z 共 26个 字母再加一个 - 号。 |
/ter\b/ | 可匹配 chapter,而不能匹配 terminal。 |
/\Bapt/ | 可匹配 chapter,而不能匹配 aptitude。 |
/Windows(?=95 |98 |NT )/ | 可匹配 Windows95 或 Windows98 或 WindowsNT,当找到一个匹配后,从 Windows 后面开始进行下一次的检索匹配。 |
/^\s*$/ | 匹配空行。 |
/\d{2}-\d{5}/ | 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。 |
<[a-zA-Z]+.*?>([\s\S]*?) | 匹配 HTML 标记。 |
正则表达式 | 描述 |
hello | 匹配 {hello} |
gray|grey | 匹配 {gray, grey} |
gr(a|e)y | 匹配 {gray, grey} |
gr[ae]y | 匹配 {gray, grey} |
b[aeiou]bble | 匹配 {babble, bebble, bibble, bobble, bubble} |
[b-chm-pP]at|ot | 匹配 {bat, cat, hat, mat, nat, oat, pat, Pat, ot} |
colou?r | 匹配 {color, colour} |
rege(x(es)?|xps?) | 匹配 {regex, regexes, regexp, regexps} |
go*gle | 匹配 {ggle, gogle, google, gooogle, goooogle, ...} |
go+gle | 匹配 {gogle, google, gooogle, goooogle, ...} |
g(oog)+le | 匹配 {google, googoogle, googoogoogle, googoogoogoogle, ...} |
z{3} | 匹配 {zzz} |
z{3,6} | 匹配 {zzz, zzzz, zzzzz, zzzzzz} |
z{3,} | 匹配 {zzz, zzzz, zzzzz, ...} |
[Bb]rainf\*\*k | 匹配 {Brainf**k, brainf**k} |
\d | 匹配 {0,1,2,3,4,5,6,7,8,9} |
1\d{10} | 匹配 11 个数字,以 1 开头 |
[2-9]|[12]\d|3[0-6] | 匹配 2 到 36 范围内的整数 |
Hello\nworld | 匹配 Hello 后跟换行符,后跟 world |
\d+(\.\d\d)? | 包含一个正整数或包含两位小数位的浮点数。 |
[^*@#] | 排除 *、@ 、# 三个特色符号 |
//[^\r\n]*[\r\n] | 匹配 // 开头的注释 |
^dog | 匹配以 "dog" 开始 |
dog$ | 匹配以 "dog" 结尾 |
^dog$ | is exactly "dog" |