文本处理三剑客
grep:文本过滤
grep,egrep(支持扩展正则表达式),fgrep(不支持正则表达式)
grep 需要查找的字符串 查找的目标文件
-v #取反
-i #忽略大小写
-n #显示目标字符串的行号
-c #显示匹配到的次数
-p #静默模式
-o #仅显示匹配到的字符串
-A# #显示包含关键字的后续几行
-B# #显示包含关键字的前几行
-C# #显示包含关键字的前后几行
-e #实现多个选项间的逻辑or关系(或)
-w #匹配整个单词
-E #匹配扩展正则表达式,等价于egrep
-F #不支持正则表达式,等价于fgrep
nmap -v -sP 172.20.0.0/16 #查看该网段中开机的机器有几个
正则表达式:
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)
不表示字符字面意义,而表示控制或通配的功能
基本正则表达式:BRE
扩展正则表达式:ERE
程序支持:grep、sed、awk、vim、less、nginx等
元字符分类:
字符匹配
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数
*:匹配前面的字符任意次数;贪婪模式
例:grep “x*y”
.*:任意长度的任意字符;
\?:匹配其前面的字符0或1次;即前面的可有可无
\+:匹配其前面的字符至少1次;
\{m\}:匹配前面的字符m次;
\{m,n\};匹配前面的字符至少m次,至多n次;
\ {0,N \}:匹配前面的字符至多Ñ次;
\ {米,\}:匹配前面的字符至少米次;
写正则表达式最好用引号引起来
位置锚定
^:行首锚定:用于模式的最左侧;
$:行尾锚定:用于模式的最右行;
^模式$:用于模式整行;
^ $:空行;
\ <或\ B:词首锚定:用于单词模式的左侧;
\>或\ B:词尾锚定:用于单词模式的右侧;
\ <PATTERN \>:匹配整个单词;
分组
\(\);将一个或多个字符捆绑在一起当做一个整体进行处理;
(\ xy \)* ab
注:分组括号内的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名方式为:\ 1,\ 2,\ 3 ...
\ 1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
\(AB \ + \(XY \)* \):
\ 1:AB \ + \(XY \)*
\ 2; XY
后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)
egrep的及扩展的正则表达式
egrep = grep -E#匹配扩展正则的元字符
字符匹配:
。任意单个字符
[]指定范围的字符
[^]不在指定范围的字符
扩展正则表达式
次数匹配:
*:匹配前面字符任意次
?:0或1次
+:1次或多次
{M}:匹配米次
{M,N}:至少米,至多Ñ次
位置锚定:
^:行首
$:行尾
\ <,\ b:语首
\>,\ b:语尾
分组:
()
后向引用:\ 1,\ 2,...
或者:
a | b:a或b
C | cat:C或cat
(C | c)在:猫或猫