设为首页 收藏本站
查看: 476|回复: 0

[经验分享] Linux中 文本处理命令 grep egrep fgrep的使

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-15 14:24:11 | 显示全部楼层 |阅读模式
个人见解:我认为Linux中的文本处理命令 grep egrep fgrep命令 其实只要牢牢掌握grep就可以了 因为其他两个几乎是一样的 不一样的地方也很好区分
grep 基本使用方法:
使用方法 grep [选项] '表达式' #学习的时候没好好听 不知道自己写错没 为了这篇博文的通常 我还是先不看之前学习的视频了
这里的常用选项有 -o -v -i -n -A -B -C -数字 -E
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
root@LookBack:~# grep -o '^root:' /etc/passwd #-o 选项是只显示匹配到的内容
root:
  
root@LookBack:~# grep -v '^root:' /etc/passwd #-v 选项是显示不是匹配的内容行
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:105::/var/run/dbus:/bin/false
bind:x:103:108::/var/cache/bind:/bin/false
landscape:x:104:109::/var/lib/landscape:/bin/false
sshd:x:105:65534::/var/run/sshd:/usr/sbin/nologin
mariadb:x:1000:1000::/home/mariadb:/sbin/nologin
www:x:1001:1001::/home/www:/sbin/nologin
  
root@LookBack:~# grep -n '^root:' /etc/passwd #-n 选项是会显示匹配行所在文件中的行
1:root:x:0:0:root:/root:/bin/bash
  
root@LookBack:~# grep -A1 '^root:' /etc/passwd #-A数字 是显示匹配行并向下显示n行
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
  
root@LookBack:~# grep -B1 '^daemon:' /etc/passwd #-B数字 是显示匹配行并向上显示n行
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
  
root@LookBack:~# grep -C1 '^daemon:' /etc/passwd #-C数字 是显示匹配行并向上向下显示n行
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
  
root@LookBack:~# grep -1 '^daemon:' /etc/passwd #-数字选项同-C
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
  
root@LookBack:~# grep -i '^ROOT:' /etc/passwd #-i 选项 其实就是忽略匹配内容的大小写
root:x:0:0:root:/root:/bin/bash



这里把-E选项单独拿出来说是因为这个东西有时候很可能就被忽略了 用了-E选项 grep就可以使用正则扩展表达式了,不然grep只能使用标准正则表达式
具体使用 还是等下在下面说吧。

grep 字符匹配:
在正则表达式中我们还有不少字符集匹配的功能 #个人见解 这些字符集需要好好记住 能在以后的使用中简洁代码和更方便的使用正则表达式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
* #表示*前字符任意次数 包括0次
\? #表示\前内容出现0或者1次
\{m\} #表示它前的字符要出现m次
\{m,n\} #表示它前的字符至少出现m次,最少出现n次
\{m,\} #表示它前的字符至少出现m次
\{0,n\} #表示它前的字符最多出现n次
. #匹配单个任意的字符
[] #匹配指定范围内的任意单个字符
.* #这里就是表示任意长度的任意字符
[[:digit:]] #匹配0-9的单个数字,在这里是不是认为[0-9]写法更好?其实错了 等使用正则表达式的时候 会发现[[:digit:]]使用更方便
[[:lower:]] #匹配单个小写字母同[a-z]
[[:upper:]] #匹配单个大写字母同[A-Z]
[[:space:]] #匹配单个空白字符 包括 空格 制表符
[[:alpha:]] #匹配单个大小写字母
[[:punct:]] #匹配单个标点符号 [^[:punct:]] 这样其实就是下面的[[:alnum]]
[[:alnum:]] #匹配单个非标点的字符 [^[:alnum:]]这样就是上面的[[:punct:]]
[^] #通过上面两行就不难理解了 [^]是取反的意思:




grep的锚定:
1
2
3
4
5
^ #行首锚定
$ #行尾锚定
^$ #空白行
\< #词首锚定也可以用\b
\> #词尾锚定也可以用\b



grep 分组
1
2
3
4
5
6
7
8
9
10
分组需要使用\(\)
例如:\(ab\)*
分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用
引用:
例如\(ab\(x\)y\).*\(mn\)
有编号:自左而后的左括号,以及与其匹配右括号
\(a\(b\(c\)\)mn\(x\)\).*\1
#: 引用第n个括号所匹配到的内容,而非模式本身
例如:
\(ab\?c\).*\1



wKioL1PDIInBVUjNAAFx_8R8lkA107.jpg
如上图我们引用的时候使用方法是:从左开始是数左括号 遇到一个就是一个组
示例:
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
32
33
34
35
1、显示/proc/meminfo文件中以大写或小写S开头的行;
# grep -i '^s' /proc/meminfo
# grep '^[Ss]' /proc/meminfo
# grep -E '^(S|s)' /proc/meminfo

2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1

3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
进一步:仅显示上述结果中其ID号最大的用户;
# grep "/bin/bash$" /etc/passwd | sort -t: -k3 -n | tail -1 | cut -d: -f1

4、找出/etc/passwd文件中的一位数或两位数;
# grep "\<[0-9][0-9]\?\>" /etc/passwd
# grep "\<[0-9]\{1,2\}\>" /etc/passwd

5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
# grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf

6、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
# grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit

7、找出netstat -tan命令执行结果中以'LISTEN'结尾的行;
# netstat -tan | grep "LISTEN[[:space:]]*$"

8、添加用户bash, testbash, basher, nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认shell相同的用户;
# grep "^\([[:alnum:]]\{1,\}\):.*\1$" /etc/passwd

9、扩展题:新建一个文本文件,假设有如下内容:
He like his lover.
He love his lover.
He like his liker.
He love his liker.
找出其中最后一个单词是由此前某单词加r构成的行。
\(l..e\).*\1r





egrep fgrep和grep的区别
egrep和grep的区别


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-22115-1-1.html 上篇帖子: linux之文本搜索工具(grep、egrep)用法 下篇帖子: CentOS7 编译安装LNMP Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表