Linux程序编程————学习笔记(7)

两个常用的命令和正则表达式
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个字符长的全部由小写字母组成的单词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值