linux文本处理三剑客(一)---grep

在linux种有一句话,叫做一切皆文件。文件有个特点,它是个文本。它可以读、可以写,如果是二进制文件,它还能执行。这样的话,我们在使用linux的时候,多数时间都是要和各式各样文件打交道的。那么,熟悉文本的读取、编辑、筛选就是linux系统管理员的必备技能。

幸而,在linux中,有三个很牛逼的文本处理工具。它们分别是:grep、sed、awk。下面我们用三篇文章来简单讲讲他们仨。

第一个登场的,是grep。它是(global search regular expression and print out the line,全面搜索正则表达式并将其打印到命令行)的缩写。它是以行来进行搜索的,同时,以行进行输出。它可以直接使用,也可以通过管道符(“|”)来与其他命令混合使用,达到更好的切割文本的效果。

基本用法:

grep “选项“  ”模式“  文件

其中,”选项“是指常用的几种功能,”模式“指要搜的正则表达式,文件则代表搜索对象。

下面一个一个介绍:

* 常用的一些功能选项:

-v: 显示版本号

-E: 默认模式为扩展正则表达式,相当于使用了egrep

-F: 默认模式为固定字符串列表,相当于使用了fgrep

-n: 输出行数

-v: 反向查找

-i: 忽略大小写

-o:只显示被选中的表达式,不显示整行

-w: 匹配整词,精确的单词,不是模糊匹配。单词的两边必须是非字符符号,以保证中间是一个完整的单词。

-A 行数:匹配到搜索行以及该行下面n行

-B 行数:匹配到搜索行以及该行上面n行

-C 行数:匹配到搜索行以及该行上下n行

* 常用的一些模式介绍:

‘^$’:空行

‘.‘: 任意一个字符

[xyz]: x、y、z任意一个

[[:space:]]: 空格及tab

[a-zA-Z]: 相当于[[:alpha:]]

[^123]:除了123以外的字符,这里的^和通配符里边的"^"意义完全不一样,且在正则表达式中,这些符号的意义与通配符中的意义完全不一样。如果按照通配符的标准来学习正则表达式,那就GG了~

[a-zA-Z0-9]: 相当于[[:alnum:]]

[A-Z]: 相当于[[:UPPER:]]

[a-z]: 相当于[[:lower:]]

[[:punct:]]: 相当于标点符号

下面举几个例子,来演示以下它们怎么使用:

我在/tmp下建立了一个test_file,抄了Bob Dylan的《make you feel my love》进去。我们来测试:

1) cat test_file|grep -w 'love',精准查找关键词'love'.

2) cat test_file|grep -v 'feel my love',grep不会打印带有'feel my love'的行。

3)cat test_file |grep -A 5 'love',grep会打印找到的love行,并其下边的5行一起打印。

4)cat test_file|grep -n '^$',输出空格行行数;若想去除空格行,可以使用grep -v '^$';若想去除注释行,可用egrep -v '#'。

5) 去除/etc/ssh/sshd_config的空格和注释,并打印行数。其中,-v表示反向输出;-E表示使用扩展正则表达式;-n表示输出行数。而'^#|^$'则表示,以"#"开头的注释和空行。|表示“或”的意思。

猜你喜欢

转载自www.cnblogs.com/young233/p/10860057.html