文本过滤工具 (grep)
程序员文章站
2022-07-12 18:58:26
...
grep命令:
grep是一种强大的文本搜索工具,基于用户指定的“”,正则表达式元字符编写出来的过滤条件”对目标文件逐行进行匹配检查,打印匹配到的行,默认打印到终端窗口。
正则表达式:由一类特殊的字符以及文本字符所编写的模式,并不代表字面含义,表达控制或者通配的功能。
用法:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
–color=auto | 高亮显示匹配到的文本 |
---|---|
-i | 忽略字符大小写 |
-n | 显示行号 |
-E | 支持使用扩展正则表达式 |
-o | |
-v | 显示不能被匹配到的行 |
-A# | 后几行 |
-B # | 前几行 |
-C # | 前后各几行 |
[root@localhost ~]# grep --color=auto "UUID" /etc/fstab
UUID=05f664d6-53c8-4e53-9291-b1321936d79c / ext4 defaults 1 1
UUID=758db803-7a5d-493b-be16-68ca2d050d55 /boot ext4 defaults 1 2
UUID=93fc053e-b9a0-4439-a822-3575ee7f3f3d swap swap defaults 0 0
匹配次数:
* | 匹配其前面的字符任意次。0次,1次或者多次 |
---|---|
.* | 匹配任意长度的任意字符 |
\? | 匹配其掐面的字符0次或者1次,最多一次 |
\+ | 匹配其前面的字符1次或者多次,至少一次 |
\{m\} | 匹配其前面的字符m次 |
\{m,n\} | 匹配其前面的字符至少m次,至多n次 |
\{0,n\} | 至多n次 |
\{m,\} | 至少m次 |
实例:
[root@localhost tmp]# cat file
xxxxxy
xyxyxyxyxy
xyyyyxsakfxy
xakfafhlkashfyasbx
asflaklkfhxy
[root@localhost tmp]# grep --color=auto(高量显示,找到的字符用其他颜色标出) x*y file(前面的x出现0次或者多次y出现一次)
xxxxxy
xyxyxyxyxy
xyyyyxsakfxy
xakfafhlkashfyasbx
asflaklkfhxy
[root@localhost tmp]# grep "x\{2,4\}y" file(记得加引号)
xxxxxy
位置锚定:
^ | 行首锚定,用于模式的最左侧 |
---|---|
$ | 行尾锚定,用于模式的最右侧 |
^ $ | 空白行 |
^pattern$ | 用pattern来匹配整行 |
\< | 词首锚定,用于单词的左侧 |
\> | 词尾锚定,用于单词的右侧 |
\<pattern\> | 锚定为一个pattern |
1.显示/etc/passwd文件中不以/bin/bash结尾的行
[root@localhost tmp]# grep -v '/bin/bash&' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
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
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
2.显示/etc/passwd中的两位数或者三位数
[root@localhost tmp]# grep '\<[[:digit:]]\{2,3\}\>' /etc/passwd
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
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
3.找出 netstat -tan 命令结果中以LISTEN后跟一个或者多个空白字符结尾的行
[root@localhost tmp]# netstat -tan | grep "LISTEN[[:space:]]\{1,\}$"
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
分组:
\(\) | 分组,将一个或者多个字符捆绑在一起当作一个整体处理 |
---|
引用:
\1 | 模式从左侧起,第一个左括号与之匹配的右括号之间模式所匹配到的字符 |
---|---|
\2 | 模式从左侧起,第二个左括号与之匹配的右括号之间模式所匹配到的字符 |
# | 模式从左侧起,第#个左括号与之匹配的右括号之间模式所匹配到的字符 |
实例:
[root@localhost tmp]# cat file
He loves his lover.
He likes his lover.
She likes her liker.
She loves her liker.
[root@localhost tmp]# grep "\(h\).*\(l..e\).*\1.*\2" file
She likes her liker.
找出ifconfig命令中的IP地址?
[root@localhost tmp]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:B6:F8:F4
inet addr:192.168.176.128 Bcast:192.168.176.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feb6:f8f4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3493 errors:0 dropped:0 overruns:0 frame:0
TX packets:1659 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:283560 (276.9 KiB) TX bytes:183236 (178.9 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@localhost tmp]# ifconfig | grep "\(192\).*[[:digit:]]$" | cut -d ":" -f 2 | cut -d " " -f 1
192.168.176.128
上一篇: Vue配置全局过滤工具
下一篇: grep 文本过滤工具。