一、简述
grep 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行由正则表达式或者字符及基本文本字符所编写的过滤条件确定
二、grep的基本用法和格式
grep root passwd 显示包含root的行
grep ^root passwd 显示以root开头的行
grep root$ passwd 显示以root结尾的行
grep -i root passwd 忽略大小写
grep -v root passwd 显示不包含匹配文本的所有行
grep -E "^root|ROOT$" passwd -E表示扩展的正则表达式,以root开头或者以ROOT结尾的行
注意:正规的 grep 不支持扩展的正则表达式子 , 竖线是用于表示”或”的扩展正则表达式元字符 , 正规的 grep 无法识别,egrep 命令等同于‘grep -E
非正规不加e无法使用
[root@desktop mnt]# grep -v ^root passwd
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
ovirtagent:x:175:175:RHEV-M Guest Agent:/usr/share/ovirt-guest-agent:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
student:x:1000:1000:Student User:/home/student:/bin/bash
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:996:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
unbound:x:995:993:Unbound DNS resolver:/etc/unbound:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
saslauth:x:994:76:"Saslauthd user":/run/saslauthd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
westos:x:1001:1001::/home/westos:/bin/bash
test:x:1002:1002::/home/test:/bin/bash
练习
找出root在位于中间的行
[root@desktop mnt]# grep -i root passwd | grep -v -i -E "^root|root$"
operator:x:11:0:operator:/root:/sbin/nologin
练习2
[root@desktop mnt]# touch r..t
[root@desktop mnt]# vim r..t
[root@desktop mnt]# cat r..t
rt
rot
root
rooot
rooooooot
rroot
rootroot
rooootroorooot
grep 'r..t' test 表示匹配r开头,t结尾的,中间含有两个任意字符的行,有几个.就匹配多少个
grep -E 'r*t' test 表示显示以r开始,t结尾,中间含有0到任意个r的行
grep -E 'ro*t' test 表示显示以ro开始,t结尾,中间含有0到任意个o的行,这里*表示匹配0到任意多个*前面的字符
grep -E 'ro?t' test 表示显示以ro开头,t结尾的,中间含有0或者1个字符的行
grep -E 'ro{1,}t' test 表示显示以ro开头, t结尾,中间含有1到多个任意字符的行
grep -E 'ro{1,3}t' test 表示显示以ro开头,t结尾,中间含有1到3个任意字符的行
grep -E 'ro{,3}' test 表示显示以ro开头,t结尾,中间含有0到3个任意字符的行
grep -E 'ro{3,}t' test 表示显示以ro开头,t结尾的,中间含有3到无穷任意字符的行
rep -E 'ro+t' test 表示显示以ro开头,t结尾的,中间含有1到无穷多个任意字符的行,与grep -E 'ro{1,}t' r..t 相同
grep -E '(root){1,}' test 表示匹配以root开头的,含有1到无穷多个root的行
grep -E 'r.*t' test 表示以r开始t结尾中间含有0到任意个任意字符的行
grep -E "r..\>" test 表示显示含有r(不一定是r开头),后面只匹配两个任意字符的行,\>表示防止向后扩展,有几个..就匹配几个任意字符
grep -E "\<..t" test 表示显示前面两个是任意字符,后面以t结尾的行,\<表示防止向前扩张,有几个.前面就匹配几个任意字符
用grep显示IP
[root@desktop mnt]# ifconfig eth0 | grep -E "inet " | cut -d " " -f 10
172.25.254.166
显示可以登陆系统的用户
[root@desktop mnt]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
[root@desktop mnt]# grep -v nologin /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh