两个常用的命令和正则表达式
find命令
find 命令是用来搜索文件的命令。初学者会觉得很复杂,因为它有选项,测试和动作类型的参数。还会因为一个参数的处理结果可能会影响到后续参数的处理。首先用root权限来执行这个命令
#find / -name test -printf
/usr/bin/test
#
解释:从根目录开始找到所以名称为test的文件,并且输出文件的完整路径。
这样全部搜索可能会浪费很长时间,所以我们要知道任何不要搜索其他文件系统目录。-mount选项,可以告诉find命令不要搜索挂载其他文件系统的目录
#find / -mount -name test -printf
/usr/bin/test
#
find命令的完整语法:find [path] [optrions] [tests] [actions]
path部分是使用路径,我们可以使用绝对路径,如/bin,或相对路径,如.。也可以指定多个路径,如find /var /home
options有很多选项,下列是一些主要选项
选项 含义
-depth 在查看目录本身之前先搜索目录内容
-follow 跟随符号链接
-maxdepths N 最多搜索N层
-mount(或-xdev) 不搜索其他文件系统的目录
测试 含义
-atime N 文件在N天之前被最后访问过
-mtime N 文件在N天之前被最后修改过
-name pattern 文件名匹配提供的模式pattern,为确保pattern被传递给find命令而不是shell处理,pattern必须总是用引号括起
-type c 文件类型为c,c是一个特殊类型。最常见的是d(目录)和f(普通文件)
-user username 文件的拥有者是指定的用户username
操作符,短格式 操作符,长格式 含义
! -nor 测试取反
-a -and 两个测试都必须为真
-o -or 两个测试有一个必须为真
$find . -newer while2 -print
查找当前目录中比while2新的文件
$find . -newer while2 -type f -print
查找当前目录中比while2新的普通文件
$find . \(-name "_*" -or -newer while2 \) -type f -print
查找当前目录中比while2新而且文件名以_开头的普通文件
动作 含义
-exec command 执行一条指令,最常见的动作之一,这个动作必须用\;来结束
-ok command 与-exec类似,但是他在执行命令之前会针对每个要处理的文件,提示用户进行确定,这个动作必须用\;来结束
-print 打印文件名
-ls 对当前文件使用命令ls-dils
$find . -newer while2 -type f -exec ls -l {} \;
grep命令
这个名字代表的就是通用正则表达式解析器。前面我们使用find命令在系统搜索文件,而使用grep命令在文件中搜索字符串。显然,最平常的使用就是我们在使用find命令时,将grep作为传递-exec的一条命令
grep语法是一个选项,要匹配的模式和要搜索的文件
grep [options] PATTERN [FILES]
如果没有提供文件名,则grep命令将搜索标准输入。
选项 含义
-c 输出匹配行的数目,而不是输出匹配的行
-E 启用扩展表达式
-h 取消每个输出行的普通前缀,即匹配查询模式的文件名
-i 忽略大小写
-l 只列出包含匹配行的文件名,而不输出真正的匹配行
-v 对匹配模式取反,即搜索不匹配行,而不是匹配行
例:
$grep in words.txt
在文件words.txt中搜索字符串in,输出匹配行
$grep -c in words.txt words2.txt
在两个文件中计算匹配行数目,文件名输出
$grep -c -v in words.txt words2.txt
使用-v选项对搜索取反,计算不匹配行的数目
正则表达式
grep命令
字符 含义
^ 指向一行的开头
$ 指向一行的结尾
. 任意单个字符
[] 方括号内包含一个字符范围,其中任意一个字符都可以被匹配,例如字符范围a-e,或在字符范围加上^符号表示使用 反向字符的范围,即不匹配的字符
如果将上述字符当作普通字符,需要在前面加一个\字符。
方括号内有一些特殊匹配机制
匹配模式 含义
[:alnum:] 字母与数字字符
[:alpha:] 字母
[:ascii:] ASCII字符
[:blank:] 空格和制表符
[:cntrl:] ASCII控制字符
[:digit:] 数字
[:graph:] 非控制、非空格字符
[:lower:] 小写字母
[:print:] 可打印字符
[:punct:] 标点符号字符
[:space:] 空白字符,包括垂直制表符
[:upper:] 大写字母
[:xdigit:] 十六进制数字
选项 含义
? 匹配是可选的,最多匹配一次
* 必须匹配0或多次
+ 必须匹配1或者多次
{n} 必须匹配n次
{n,} 必须匹配n次或以上
{n,m} 匹配次数在n到m之间,包括n和m
$ grep e$ words2.txt
查找以字母e结尾的行
$ grep a[[:blank:]] words2.txt
查找以字母a结尾的单词,使用[[:blank:]],它用来测试空格和制表符
$ grep Th.[[:space:]] words2.txt
查找以Th开头的由三个字母组成的单词,即要使用[[:blank:]]来划定结尾,用(.)来匹配额外的一个字符
$ grep -E [a-z]\{10\} words2.txt
最后,用扩展grep模式来搜索只有10个字符长的全部由小写字母组成的单词。