grep:文本过滤,横向截取,(模式:pattern)工具
grep, egrep, fgrep(不支持正则表达式搜索)
sed:stream editor,文本编辑工具,文本的替换与编辑,不是进入交互式界面,而是直接在命令行编辑,它是非交互式性的,
日常中,批量对大量主机进行操作。交互式的太麻烦。
awk:Linux上的实现gawk,文本报告生成文本过滤,是一门编程语言
细说grep: Global search REgular expression and Print out the line
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查,它能使用正则表达式搜索文本,并把匹配的行打印出来。
模式:由正则表达式字符及文本字符所编写的过滤条件
grep常用选项
grep 关键字 文件
--color=auto 关键字高亮显示
*-v 关键字 显示不包含关关键字的行,取反
*-i 关键字 忽略关键字的大小写
-n 显示的结果每行前增加行号
-c 仅显示找出的结果的行数
*-o 仅显示匹配到的关键字,不显示同行的其他内容
-e 关键字1 -e 关键字2 …… 多个关键字之间是或的关系
*-w 关键字 匹配整个单词
*-E 等于egrep 使用扩展正则表达式
-F 等于fgrep 不使用正则表达式
[root@Centos6 ~]# ifconfig|grep -n Link
1:eth0 Link encap:Ethernet HWaddr 00:0C:29:B2:43:60
8:eth1 Link encap:Ethernet HWaddr 00:0C:29:B2:43:6A
10: inet6 addr: fe80::20c:29ff:feb2:436a/64 Scope:Link
17:lo Link encap:Local Loopback
[root@Centos6 ~]# ifconfig|grep -c Link
4
[root@Centos6 ~]# ifconfig|grep -o Link
Link
Link
Link
Link
[root@Centos6 ~]# ifconfig|grep -e Link -e bytes
eth0 Link encap:Ethernet HWaddr 00:0C:29:B2:43:60
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
eth1 Link encap:Ethernet HWaddr 00:0C:29:B2:43:6A
inet6 addr: fe80::20c:29ff:feb2:436a/64 Scope:Link
RX bytes:8469102 (8.0 MiB) TX bytes:14937052 (14.2 MiB)
lo Link encap:Local Loopback
RX bytes:4882 (4.7 KiB) TX bytes:4882 (4.7 KiB)
[root@Centos6 ~]# ifconfig|grep -w RX
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
RX packets:94218 errors:0 dropped:0 overruns:0 frame:0
RX bytes:8474036 (8.0 MiB) TX bytes:14941782 (14.2 MiB)
RX packets:74 errors:0 dropped:0 overruns:0 frame:0
RX bytes:4882 (4.7 KiB) TX bytes:4882 (4.7 KiB)
[root@Centos6 ~]# ifconfig|grep -w '\<RX\>'
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
RX packets:94278 errors:0 dropped:0 overruns:0 frame:0
RX bytes:8479076 (8.0 MiB) TX bytes:14945820 (14.2 MiB)
RX packets:74 errors:0 dropped:0 overruns:0 frame:0
RX bytes:4882 (4.7 KiB) TX bytes:4882 (4.7 KiB)
[root@Centos6 ~]#
模式部分:
基本正则表达式元字符分类:字符匹配,匹配次数,位置锚定,分组
基本正则表达式元字符
字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.* 任意长度的任意字符(.表示任意内容,*表示任意长度,合起来就是任意长度的任意内容)
[root@CentOs7 ~]# cat 3.ttx
jxijjxs
aaannnl
jsjja
[root@CentOs7 ~]# cat 3.ttx|grep 'a.*l'
aaannnl
[root@CentOs7 ~]#
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词
[root@Centos6 ~]# echo aaa |grep '^a\{2,3\}$'
aaa
[root@Centos6 ~]# echo aaabbaaa |grep '^a\{2,3\}$'
[root@Centos6 ~]#
上行命令只有一行表示只有连续的a才能输出,以a开头以a结尾且中间必须至少2次连续,不能有其他的字符。
分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
• 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为
: \1, \2, \3, ...
• \1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
• 示例: \(string1\+\(string2\)*\)
\1 :string1\+\(string2\)*
\2 :string2
• 后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
• 或者:\|
示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat
扩展的(Extend)正则表达式(注意要使用扩展的正则表达式要加-E选项,或者直接使用egrep):
匹配字符:这部分和基本正则表达式一样
匹配次数:
* :和基本正则表达式一样
? :基本正则表达式是\?,二这里没有\。
{m,n} :相比基本正则表达式也是没有了\。
+ :匹配其前面的字符至少一次,相当于{1,}。
位置锚定:和基本正则表达式一样。
分组及引用:
(string) :相比基本正则表达式也是没有了\。
\1 :引用部分和基本正则表达式一样。
\n :引用部分和基本正则表达式一样。
在扩展正则表达式中,字符锚定的 \ 和后项引用的 \ 需要保留。其他(匹配次数和元字符)可以去掉