Linux文本处理“三剑客”之grep

简介:

    在linux中,因为一切皆文件,而大部分程序的配置文件是文本形式的。所以对文本的处理就显得相当的重要了。对文本的处理包括对文本内容的搜索,文本内容的处理。下面就介绍文本的搜索相关知识。


文本内容搜索

    文本搜索的含义是:根据用户指定的文本搜索模式(搜索条件)对目标文件进行逐行的扫扫描,将匹配到的行打印在屏幕上。文本搜索的主要作用是用于统计相关信息。


一、正则表达式 

1、正则表达式的概念

    是一类字符的书写模式,这些个字符不代表本字符的意义,而是具有特殊意义。一般是对控制或通配的功能。


2、正则表达式的识别

    靠正则表达式引擎来负责翻译或者解释其中元字符的含义,正则表达式引擎是一段程序。通常每种语言(包括shell)的正则表达式引擎都不一样,从而导致了每种语言的正则表达式的元字符所代表的意义都不尽相同。


3、正则表达式的元字符

    正则表达式元字符:就是代表特殊意义的特殊字符。

1)字符集种类及表示方法

种类 意义
0-9 或 [:digit:] 0-9数字
a-z 或 [:lower:] 小写字母
A-Z 或 [:upper:] 大写字母
[:space:] 空格或TAB空白字符
[:punct:] 特殊字符
[:alpha:] 大小写字母
[:alnum:] 字母和数字的组合

2)基本正则表达式的元字符:

元字符种类 具体含义 示例
字符匹配 . 表示匹配任意单个字符 l..k  匹配像:love,like
[] 匹配指定范围内任意单个字符

[0-9] 0-9任意一个数字

[[:upper:]] 匹配大写字母中的任意一个

[^] 匹配指定范围外的任意单个字符

[^a-z] 匹配除a-z以外的任意字符

[^[:alnum:]] 匹配除数字和字母以外的任意字符

次数匹配 * 匹配前面字符任意次,包括0次 ca*  匹配像:c,ca,caa,caaa等
\? 匹配前面字符至多一次,就是说前面的字符可有可无 ha\?  匹配的只有:he,h
\{m\} 精确匹配前面的字符m次 hm\{2}\  匹配的只有:hmm
\{m,\} 匹配前面的字符至少m次 hm\{2,}\  匹配像:hmm,hmmm等
\{m,n\} 匹配前面字符至少m次,至多n次 hm\{2,4\} 匹配:hmm,hmmm,hmmmm
\{0,m\} 匹配前面的字符至多n次 hm\{0,3\} 匹配:hm,hmm,hmmm
位置锚定 ^ 锚定行首,写在最左侧 ^abc  
$ 锚定行尾,写在最右侧 abc$
\<  \b 锚定单词词首,出现与单词最左侧  \<abc \babc
\>   \b 锚定单词词尾,出现单词的最右侧 abc\> abc\b
分组 \(\) 分组中的模式匹配到的内容,可由正则表达式引擎保存在内存中,之后可被引用 \(abc\)
\# 引用定#个括号所配到的内容,而非模式本身。#确定方法自左向右左括号的个数 \1,\2

    注意:在这里单词的意思是,不包含特殊字符的连续字符组成的字符串就叫做单词。

3)扩展正则表达式的元字符:


元字符种类 具体含义 示例
字符匹配 . [] [^] 同基本正则表达式完全一样
次数匹配

* ? {m}{m,}

{m,n} {0,m}

同基本正则表达式一样,但注意一点是:?和{}在使用的时候不用转义了
+ 匹配前面的字符至少1次 hm+ 匹配:hm,hmm,hmmm等
位置锚定 ^ $ \<  \b  \> 同基本正则表达式完全一样
分组
() 同基本正则表达式一样,但注意一点是()在使用的时候不用转义了
或者 |

表示选择关系

c|Cat 匹配的是:c 或者 Cat

|整个左边是一部分,|整个右边是一部分


二、文本内容搜索命令

    常用的文本搜索命令有grep,egrep,fgrep

1、grep:Golbal search REgular and Print out the line.

    文本搜索的含义是:根据用户指定的文本搜索模式(搜索条件)对目标文件进行逐行的扫扫描,将匹配到的行打印在屏幕上。

    Usage: grep [option]... 'PATTERN' FILE...

    对于PATTERN的条件的设定或者说书写,可以借助于正则表达式。

常用参数 参数意义 示例
-i
匹配时PATTERN中的条件,忽略器大小写 grep -i 'Root' /etc/passwd
-v
反向匹配,显示没有匹配到的行 grep -v 'linux' /etc/passwd
-o 只显示匹配到的内容 grep -o 'gentoo' /etc/passwd
--color=auto 支持扩展表达式 grep --color=auto 'root' /etc/passwd
-A 显示匹配行的后面指定数目行 grep -A 2 'linux' /etc/passwd
-B 显示匹配行的前面指定数目行 grep -B 3 'linux' /etc/passwd
-C 显示匹配行的前后指定相同数目行 grep -C 2 'linux' /etc/passwd
-n 显示输出行的行号 grep -nC 2 'linux' /etc/passwd
-E 支持扩展正则表达式 grep -E '[0-9]+' /etc/passwd
-c 只显示匹配到行的数目 grep -c '^root\>' /etc/passwd

2)egrep相等于grep -E。

3)fgrep:fast grep,这里不支持正则表达式,常用选项和grep一样。


三、综合练习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#1、显示/proc/cpuinfo文件中以大写或小写C开头的行,并显示出对应的行号;
#实现命令:
#grep -n '^[Cc]' /proc/cpuinfo 
#grep -nE '^c|C' /proc/cpuinfo 
#grep -i '^c' /proc/cpuinfo
#演示结果 
[root@server ~] # grep -n '^[Cc]' /proc/cpuinfo | head -n 3
3:cpu family   : 6
7:cpu MHz      : 2394.620
8:cache size   : 3072 KB
 
#2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的,并且UID最小的用户
[root@server ~] # grep '/sbin/nologin$' /etc/passwd | sort -n -t: -k3 | head -n 1 | cut -d: -f1
bin
 
#3、找出/etc/passwd文件中的一位数或两位数或三位数;
[root@server ~] #grep "\<[0-9]\{1,3\}\>" /etc/passwd
shutdown :x:6:0: shutdown : /sbin : /sbin/shutdown
halt:x:7:0:halt: /sbin : /sbin/halt
mail:x:8:12:mail: /var/spool/mail : /sbin/nologin
uucp:x:10:14:uucp: /var/spool/uucp : /sbin/nologin
operator:x:11:0:operator: /root : /sbin/nologin
games:x:12:100:games: /usr/games : /sbin/nologin
 
 
#4、-c:只显示匹配到行的数目
[root@server ~] # grep 'root' -n /etc/passwd
1:root:x:0:0:root: /root : /bin/bash
11:operator:x:11:0:operator: /root : /sbin/nologin
[root@server ~] # grep 'root' -c /etc/passwd
2


1
2
#5、找出ifconfig命令结果中的1-255之间的数字
# ifconfig | grep -o -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

wKioL1O5VIzh3c07AAHz7Enw6N4250.jpg











本文转自 羊木狼 51CTO博客,原文链接:http://blog.51cto.com/guoting/1435072,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Linux
认识Linux指令之 “find grep” 命令
认识Linux指令之 “find grep” 命令
认识Linux指令之 “find grep” 命令
|
2月前
|
Linux Shell Perl
Linux下的Shell基础——文本处理工具(五)
Linux下的Shell基础——文本处理工具(五)
31 1
Linux下的Shell基础——文本处理工具(五)
|
3月前
|
Linux
【linux】find、xargs、grep 联合查找文件内容
【linux】find、xargs、grep 联合查找文件内容
74 1
|
4月前
|
Linux 测试技术
软件测试/测试开发|一文详解Linux grep命令
软件测试/测试开发|一文详解Linux grep命令
56 1
|
4月前
|
SQL Linux 应用服务中间件
Linux - 管道(|)和grep 命令
Linux - 管道(|)和grep 命令
56 0
|
4月前
|
Linux Go 数据安全/隐私保护
linux常用命令手册 用户管理useradd 文件权限管理chmod 搜索管理find grep
linux常用命令手册 用户管理useradd 文件权限管理chmod 搜索管理find grep
63 2
|
1月前
|
存储 监控 Linux
性能工具之linux三剑客awk、grep、sed详解
Linux 三剑客 awk,sed和grep 在性能领域广泛用于性能建模、性能监控及性能分析等方面,也是各大互联网公司测试岗高频面试题,中高端测试人员必备技能之一。
51 1
性能工具之linux三剑客awk、grep、sed详解
|
6天前
|
Linux
Linux 指令|date|cal|find|grep|热键
Linux 指令|date|cal|find|grep|热键
|
4月前
|
Linux Shell 开发工具
Linux tail & cat & grep 命令详解
Linux tail & cat & grep 命令详解
217 0
|
25天前
|
弹性计算 Linux Shell
Linux技术基础(2)——文本处理
文本处理实验:探索[Vim](https://developer.aliyun.com/adc/scenario/aced2264751f4866a8340de4cf9db0fa)的命令、输入和底线模式,学习文本编辑快捷操作,如光标移动、删除、复制和粘贴。了解如何使用底线命令模式进行文件保存、退出及搜索替换。同时,掌握`cat`、`more`、`less`、`head`、`tail`等文本查看命令,以及`stat`、`wc`、`file`、`diff`等文件处理命令。利用`grep`、`sed`、`awk`和`cut`进行文本搜索、替换和分析。