云服务器

文本三剑客之grep

2020-07-24 10:13:29 25

grep全称是Global Regular Expression Print,是一个强大的文本搜索工具,可以根据指定模式来匹配以输出符合要求的字符串。

 

1.常用的命令参数

-q 或 —quiet或—silent : 不显示任何信息

-i 或 —ignore-case : 忽略字符大小写的差别。

-c 或 —count : 计算符合样式的列数。

A<显示行数> 或 —after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容

-B<显示行数> 或 —before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。

-C<显示行数> 或 —context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。

 

 

2.1统计匹配的行数

2例如统计/etc/passwd中nologin的用户数 一般nologin的为系统的服务用户。

root@localhost:~# grep -c nologin /etc/passwd

17

统计/etc/passwd 中开头是 root 的用户

root@localhost:~# grep -c ^root /etc/passwd

1

 

2.2忽略大小写

忽略大小写,查找出/etc/passwd 名为network 字段。

root@localhost:~# grep -i network /etc/passwd*

/etc/passwd:systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false

/etc/passwd-:systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false

 

 

2.3显示行数

搜索root用户所为的行数。

root@localhost:~# grep -n ^root /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

 

 

2.4搜索上下文的行数内容

搜索字符串附近的内容,

1.A{NUM],A 代表After,打印匹配的行及其下面x行。

查找root用户字符串下面的一行

root@localhost:~# grep -A1 ^uuidd /etc/passwd

uuidd:x:108:112::/run/uuidd:/bin/false

dnsmasq:x:109:65534:dnsmasq,,,:/var/lib/misc:/bin/false

 

2.B{NUN},B代表Before,打印匹配的行及其上面X行。

查找uuidd用户字符串上面的一行

root@localhost:~# grep -B1 ^uuidd /etc/passwd

messagebus:x:107:111::/var/run/dbus:/bin/false

uuidd:x:108:112::/run/uuidd:/bin/false

 

3.C{NUM],打印匹配的行及其上面的x行和下面x行

root@localhost:~# grep -C1 ^uuidd /etc/passwd

messagebus:x:107:111::/var/run/dbus:/bin/false

uuidd:x:108:112::/run/uuidd:/bin/false

dnsmasq:x:109:65534:dnsmasq,,,:/var/lib/misc:/bin/false

 

 

3.1静默模式

查找指定的字符串是否有匹配,但并不关心具体的输出。选项-q表示进入静默模式,它不会产出输出,通过返回值表示匹配结果。返回值为0说明有匹配对象,返回值为1说明没有匹配对象。静默模式在代码中常用到,它可以避免屏幕中的无效输出。

查找lsmod中已载入的系统模块有没有xen
root@localhost:~# lsmod |grep xen
xenfs 16384 1
xen_privcmd 16384 1 xenfs
root@localhost:~# lsmod |grep xen -q
root@localhost:~# echo $?
0
以上返回0 则是说明有xen的模块

 

 

3.2匹配的文件对象

查找那些文件有匹配的字符串,应当使用选项-l来实现。

那些文件有 root字符串的文件
root@localhost:/etc# grep -l ^root /etc/*
/etc/group
/etc/group-
/etc/gshadow
/etc/gshadow-
/etc/passwd
/etc/passwd-
/etc/services
/etc/subgid
/etc/subgid-
/etc/subuid
/etc/subuid-
/etc/sudoers

 

 

3.3递归目录

查找某个目录下面连同子目录下面的所有文件的字符串,需要使用递归选项-r,就想下面的一样。

查找/etc/systemd目录下面带有root的文件
root@localhost:/etc# grep -r root /etc/systemd
/etc/systemd/logind.conf:#KillExcludeUsers=root

睿江云官网链接:www.eflycloud.com

上一篇: 无

微信关注

获取更多技术咨询