正则表达式(Regular Express,RE)
是一种字符模式,用于在查找过程中匹配指定的字符,能被UNIX/Linux上所有的模式匹配工具识别的基本元字符
^ | 行首定位符,匹配以指定字符开头的行,^root |
$ | 行尾定位符,匹配以指定字符结尾的行,root$ |
. | 匹配单个字符。一个小数点代表一个任意字符 |
* | 匹配任意个前导字符,例如ro*t,意思可以匹配到rt,rot,roooooot等 |
+ | 匹配1个或多个前导字符,例如rot,可以匹配到rot,rooot,且不能匹配rt |
? | 匹配0个或1个前导字符。例如ro?t,只能匹配到rt或者rot |
[ ] | 方括号内为一个字符组,可以匹配字符组内容任意一个字符,也可以[0-9],[a-z],[A-Z]这种方式来表示一个范围 |
[ ^ ] | 匹配不在字符组内的任意一个字符,例如:0-9表示不包含任何数字 |
( ) | 子表达式组合,例如(abc)+,可以匹配一个abc或者多个abc连续出现 |
| | 或者的意思,可以匹配多个内容,例如A | B,表示可以匹配到包含A或B的行 |
** | 转义字符,可以让一些具有特殊功能的符号失去特殊功能,例:() 可以在正则表达式中匹配括号 |
{x} | 一个字符或表达式匹配到的内容只重复x次,例,[0-9]{3},只能匹配到三位的数字。 |
{x,} | 一个字符或表达式匹配的内容至少重复x次,例:[a-z]{10},只能匹配到连续十个小写字符的字符串 |
{x,y} | 一个字符或表达式匹配的内容至少重复x次,最多重复y次。例:[A-Z]{5,7},可以匹配到5到7个大写字母组成的字符串。awk需要指定-posix 选项才能使用{ } |
grep
使用方法:grep '关键字'
常用grep选项
选项 | 功能 |
---|---|
-c | 显示匹配到的行的数目,而不是显示行的内容 |
-i | 比较字符时忽略大小写 |
-l | 只列出匹配行所在的文件的文件名 |
-n | 在每一行前面加上它在文件中的相对行号 |
-v | 反向查找,只显示不匹配的行 |
-w | 把表达式做为词来查,就好像被<和>所包含一样 |
-A | 匹配到模式所在行的后两行 |
-B | 匹配到模式行所在行的前两行 |
-C | 匹配到模式所在行的前后两行 |
-R | 对列出的目录,递归的读取并处理这些目录中的所有文件,也就是指该下目录下的所有目录 |
扩展grep,包含grep的所有功能,类似于grep -E
示例:
1、基本用法
2、-c 显示匹配到的行的数目,而不是显示行的内容
3、-i 比较字符时忽略大小写
4、-n 显示过滤出的内容所在行行号
5、-v 取反,显示与指定字符串不匹配的内容
6、-A ,过滤出符合要求的行以及下面的n行(-B,-C用法类似)
7、过滤出包含数字1,3,5的行,使用[]
8、^:次幂符可以过滤出以指定字符串开头的行
sed
sed是一种新型的,非交互式的编辑器。它不会修改原文件。
sed编辑器逐行处理文件(或输入),并将输出结果发送到屏幕。sed把正在处理的行保存在一个临时缓冲区。sed处理完模式空间中的行后,就把该行发送到屏幕。sed处理完一行就将其从模式空间删除,然后将下一行读入空间。
sed的命令与选项
命令 | 功能 |
---|---|
a\ | 在当前行后添加一行或多行 |
c\ | 用新文本修改(替换)当前行中的文件 |
d | 删除行 |
i\ | 在当前行前插入文本 |
h | 把模式空间里的内容复制到暂存缓冲区 |
H | 把模式空间里的内容追加到暂存缓冲区 |
g | 取出暂存缓冲区的内容,并将其复制到模式空间,覆盖该处原有内容 |
G | 取出暂存缓冲区的内容,并将其复制到模式空间,追加在原有内容后面。 |
l | 列出非打印字符 |
p | 打印行 |
n | 读入下一输入行,并从下一条命令而不是第一条命令开始对其处理 |
q | 结束或退出sed |
r | 从文件中读取行 |
! | 对所选行以外的所有行应用命令 |
s | 用一个字符串替换另一个 |
替换标志 | |
g | 在行内进行全局替换 |
p | 打印行 |
w | 将行写入文件 |
x | 交换暂存缓冲区与模式空间的内容 |
y | 将字符转换为另一个字符(不能对正则表达式使用y) |
awk
awk是一种用于处理数据和生成报告的UNIX编程语言,gawk是基于Linux的GNU版本。
awk的格式:awk指令由模式、操作、或模式与操作的组合组成。
awk可以接受来自文件、管道或标准输入的输入。
-F 指定分隔符,默认空格和TAB制表符
匹配模式(~)
匹配行首(^)
匹配或选择(|)
比较表达式
关系运算符
运算符 | 含义 | 示例 |
---|---|---|
< | 小于 | x < y |
<= | 小于或等于 | x <= y |
== | 等于 | x == y |
!= | 不等于 | x != y |
>= | 大于或等于 | x >= y |
> | 大于 | x > y |
~ | 与正则表达式匹配 | x ~ /y/ |
!~ | 与正则表达式不匹配 | x !~ /y/ |
逻辑运算符和复合运算符
运算符 | 含义 | 示例 |
---|---|---|
&& | 逻辑与 | a&&b |
|| | 逻辑或 | a||b |
! | 逻辑非 | !a |
awk -F ':' 'BEGIN{语句} {if(条件){语句1;语句2;语句3} } END{语句}' filename
扩展
递归过滤:
如在data目录下,过滤所有*.php文档中含有eval的行
grep -r --include= "*.php" 'eval' /data/