grep(第一剑)
目的
过滤,查找文档中的内容
分类
1.grep
2.egrep
扩展支持正则
\w 所有字母与数字,称为字符[a-zA-Z0-9] 'l[a-zA-Z0-9]*ve' === 'l\w*ve'
\W 所有字母与数字之外的字符,称为非字符 'love[^a-zA-Z0-9]+' === 'love\W+'
\b 词边界 '\<love\>' === '\blove\b'
3.fgrep
不支持正则
返回值
0 是找到了 ,表示成功;
1 是没有,表示在所提供的文件无法找到匹配的pattern
2 表示在所提供的文件无法找到匹配的pattern
示范
## grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
## echo $?
0
## grep 'root1' /etc/passwd #用户root1并不存在
## echo $?
1
## grep 'root' /etc/passwd1 #这里的/etc/passwd1文件并不存在
grep: /etc/passwd1: No such file or directory
## echo $?
2
参数
grep -q 静默
[root@localhost ~]# grep "5\.." 1.txt
5.1
5.2
5.a
5.b
5..
5...
5.aaa
[root@localhost ~]# grep -q "5\.." 1.txt //静默了没有把结果打印在屏幕上
[root@localhost ~]# echo $?
0
grep -v 取反
grep -R 可以查目录下面的文件
[root@localhost ~]# grep zhangsan /home/
grep: /home/: 是一个目录
[root@localhost ~]# grep -R zzhangsan /home/
/home/zhangsan/.cache/gdm/session.log
/home/zhangsan/.cache/imsettings/log [HOME=/home/zhangsan.config/imsettings]
匹配到二进制文件 /home/zhangsan/.cache/tracker/meta.db
匹配到二进制文件 /home/zhangsan/.cache/tracker/meta.db-wal
grep -o 只找到这个关键字就可以
[root@localhost ~]# grep "a" 1.txt
5.a
5.aaa
a
ab
abc
abcd
abcde
abcdef
loveable
ldfadasfsdave
[root@localhost ~]# grep -o "a" 1.txt
a
a
a
a
a
a
a
a
a
a
a
a
a
a
grep -B2前两行
grep -A2后两行
grep -C2上下两行
egrep -l 只要文件名
[root@localhost ~]# egrep -l 'root' /etc/passwd
/etc/passwd
egrep -n 带行号
示例
grep -E 或 egrep 进行使用
egrep 'NW' datafile // 在datafile文件中,找NW
# egrep 'NW' d* //找NW,文件只要是d开头就可以
# egrep '^n' datafile //以n开头的
# egrep '4$' datafile //4结尾
# egrep TB Savage datafile //找TB,在savage里找,在datafile里找
# egrep 'TB Savage' datafile //找TB Savage
# egrep '5\..' datafile //找五点后面是一个任意字符
# egrep '\.5' datafile //找点五
# egrep '^[we]' datafile //W或E开头
# egrep '[^0-9]' datafile //不是0到9
# egrep '[A-Z][A-Z] [A-Z]' datafile //俩大写,空格,大写的行
# egrep 'ss* ' datafile //s开头,0到多个s
# egrep '[a-z]{9}' datafile //小写字母出现9次
# egrep '\<north' datafile //单词开头
# egrep '\<north\>' datafile //a或r开头,中间任意,n结尾
# egrep '^n\w*\W' datafile //n开头,多个字母,结尾一个非字母
# egrep '\bnorth\b' datafile //就找north
# egrep 'NW|EA' datafile //NW或者EA
# egrep '3+' datafile //1个或多个3
# egrep '2\.?[0-9]' datafile //2开头,0个或1个点,一个数字
# egrep '(no)+' datafile //一个或多个no
# egrep 'S(h|u)' datafile // sh或su
# egrep 'Sh|u' datafile // sh或者u