文本处理工具
linux文本处理三剑客
grp:文本过滤工具(模式:pattern)
sed:文本编辑器--流编辑器
awk:linux上的实习为gawk,文本报告生成器(格式化文本)
三个工具都会用到正则表达式
Regual Expression
由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字面意义,而是用于控制或通配的功能
分类
基本正则表达式
扩展正则表达式
二者区别元字符不同
grep:global search regular expression and print out the line
作用:文本搜索工具,根据用户指定的模式(过滤条件)对目标文本逐行匹配检查,打印匹配到的行
模式:有正则表达式的元字符及文本字符所编写出的过滤条件
grep
常见选项:--color=auto 自动着色匹配到的文本
-i ingnorecase忽略字符大小写
-o 仅显示匹配到的字符串本身
-v 仅显示反向匹配,显示不能匹配到的文本
-E 支持使用扩展的正则表达式
-q 静默模式不输出任何信息
-A#显示搜索到的文本结果的之后#行
-B#显示搜索到的文本结果的之前#行
-C#显示搜索到的文本结果的之前后#行
正则表达式的元字符
字符匹配
.:点号匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:],[:lower:],[:upper:],[:alpha:],[:punct:],[:space:],[:alnum:]
匹配次数-----------(正则表达式工作在贪婪模式下有多长匹配多长)
用在要指定其出现的次数的字符后面
用于限定其前面字符的出现次数
*: 匹配其前面字符任意次--0,1或多次
.* 匹配任意长度的任意字符
\? 匹配其前的字符0次或1次,即前面的字符可有可无
\+ 匹配其前面的字符1次或多次,即前面的字符出现至少一次
\{m\}匹配其前面的字符m次,精确次数匹配
\{m,n\}匹配前面的字符至少m次,至少n次
\{0,n\}匹配前面的字符至多n次
\{m,\}匹配前面的字符至少m次,多了不限
位置锚定
^:行首锚定;用于模式的最左侧
$:行尾锚定;用模式的最右侧
^PATTERN$:用于匹配整行
^$:空白行锚定
^[[:space:]]*$:空白行或包含空白字符的行
单词:非特殊字符组成的连续字符(字符串)都称为单词
\<:词首锚定,用于单词模式的左侧
\>:词尾锚定,用于单词模式的右侧
\<PATTERN\>匹配完整单词
分组及引用
\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理
\(xy\)*ab
xy出现0次1次或多次
注:分组括号中的模式匹配到的内容,会被正则表达式引擎自动记录于内部的变量中,这些变量为
\1
\2
\3
......
后向引用:
grep “\(l..e\)*\1”
引用前面的分组括号中的模式所匹配到的字符
grep
支持基本正则表达式
-E支持扩展正则表达式
-F不使用正则表达式
egrep
支持扩展正则表达式
-G支持基本正则表达式
-F不使用正则表达式
fgrep ---------当无需要用到元字符去编写模式时,使用fgrep性能更好
不支持正则表达式
-E支持扩展正则表达式
-G支持基本正则表达式
--------------------------------------------------------------------------------
扩展正则表达式的元字符
字符匹配
.:任意单个字符
[]:指定范围内的任意单个字符
[^]:指定范围外的任意单个字符
次数匹配
*:任意次0,1或多次
?:0次或1次
{m}匹配其前字符m次
{m,n}:匹配其前字符最少m次,最多n次
{0,m}:匹配其前字符最多m次
{m,}:匹配最少m次
位置锚定
^:行首锚定
$:行尾锚定
\<:词首锚定
\>:词尾锚定
或:a|b 整个右侧或左侧
C|cat C或cat
(C|c)at Cat或cat
分组及引用:
():分组
后向引用:
\1
\2
\3
...
---------------------------------------------------------------------------------------------------------
linux文件查找
find
文件查找
locate
文件查找:在文件系统上查找符合条件的文件
locate
依赖于实习那构建号的索引库
系统自动实现
手动创建跟新数据库(updatedb,非常消耗系统资源)
工作特性:
查找速度快
模糊查找
非实时查找,可能文件已经有变动或不存在
locate
locate [option]...PATTERN...
-b只匹配路径中的基名
-c统计出共有多少个符合条件的文件
-r使用基本正则表达式
find命令
实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找
工作特性:
查找速度略慢
精确查找
实时查找
find
find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
查找起始路径:制动具体搜索目标起始路径;默认为当前目录
查找条件:指定的查找标准,可以根据文件名,大小类型。从属关系,权限等标准进行。默认为,找出指定路径下的所有文件(效果类似ls)
处理动作:对符合查找条件做出的操作,例如删除,默认为输出至标准输出
查找条件:
表达式:
选项和测试
测试: 结果通常为布尔型(true,false)
查找条件
-name “PATTERN”
-iname “PATTERN” 忽略大小写
PATTERN--->glob风格的通配符
* ? [] [^].....
-regex PATTERN 基于正则表达式正则表达式查找文件
匹配是整个路径,而非基名(用的不多)
组合测试:
与:-a 默认为组合逻辑(多个条件同时符合)
或:-o (or) 满足其中一个条件即可
非:-not , ! 条件取反
选项
根据文件的属主属组查找
~]#find /tmp -user username
查找/tmp下username属主的文件
/uid
/group
/gid
/nouser
/nogroup
注:用户被删除,组被删除,没有属主和属组的文件只剩下UID和GID 没有属主和属组
可用ls查看
根据文件的类型查找
-type TYPE
f普通文件
d目录文件
l符号链接文件
b块设备
c字符设备
p管道文件
s套接字文件
根据文件大小查找
-size [+|-]#UNIT #为指定大小的数字
常用单位:K.M.G
#UNIT-----(#-1,#)
-#UNIT----(0,#-1)
+#UNIT----(#,无穷大)
根据时间戳查找
以天为单位
-atime [+|-]#
+#-------(x>=#+1)
-#------(x<#)
#------(#<=x<#+1)
-mtime
-ctime
以分钟为单位
-amin
-mmin
-cmin
根据文件权限查找
-prem [+|-] MODE
MDOE:精确匹配
MODE 三位数字表示的权限例如664,755,222...
+MODE任何一类用户(U,G,O)的权限中的任何一位符合条件既满足条件
find ./ +222 任何一类用只要拥有写即可
find ./ +621 属主有读写或属组有写或其他人有执行权限三种情况符合一种即满足条件
-MODE每一类用户的权限中的每一位同时符合条件即满足
find ./ -222 表示每一位权限小于等于2
find ./ -666 包括666,650,550,111但是不包括766
处理动作:
-print 输出至标准输出;默认动作
-ls 类似于对查找到的文件执行“ls -l”
-delete 删除查找到的文件(慎用)
-fls /PATH/TO/SOMEFILE 查找到文件的长格式信息保存到指定文件中
-ok COMMAND {}\; 对于查找到的文件执行由COMMAND表示的命令,每次都需要用户确认
-exec COMMAND {}\; 对于每次查找到的文件执行有由COMMAND表示的命令,但是不需要用户确认
注意:有些命令不能接收过长的参数此时命令的执行会失败。
解决方法,find | xargs COMMAND