一 目的
过滤,查找文档中的内容
二 分类
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
就不支持正则 //显示本意
# fgrep . 1.txt
l.ve
三 返回值
0 是找到了 表示成功;
1 是没有 表示在所提供的文件无法找到匹配的pattern
2 找到地儿不对 语法不正确
示范:
# 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 静默 //不显示结果
# grep "5\.." 1.txt // \.任意一个字符
5.1
5.2
5.a
5.b
5..
5...
5.aaa
# grep -q "5\.." 1.txt
# echo $?
0 //有此选项
grep -v 去反
grep -R 可以查目录下面的文件
# grep xulei /home/
grep: /home/: 是一个目录
# grep -R xulei /home/
/home/xulei/.cache/gdm/session.log
/home/xulei/.cache/imsettings/log [HOME=/home/xulei/.config/imsettings]
匹配到二进制文件 /home/xulei/.cache/tracker/meta.db
匹配到二进制文件 /home/xulei/.cache/tracker/meta.db-wal
grep -o 只找到这个关键字就可以
# grep "a" 1.txt
5.a
5.aaa
a
ab
abc
abcd
abcde
abcdef
loveable
ldfadasfsdave# 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 只要文件名
# egrep -l 'root' /etc/passwd
/etc/passwd
egrep -n 带行号
# egrep -n 'xulei' /etc/passwd
43:xulei:x:1000:1000::/home/xulei:/bin/bash
5示例:
grep -E 或 egrep 进行使用
# egrep 'NW' datafile.txt
在datafile文件中,找NW
# egrep 'NW' d*.txt
找NW,文件只要是d开头就可以
# egrep '^n' datafile.txt
以n开头的
# egrep '4$' datafile.txt
4结尾
# egrep TB Savage datafile.txt
找TB,在savage里找,在datafile里找
# egrep 'TB Savage' datafile.txt
找TB Savage
# egrep '5\..' datafile.txt
找五点后面是一个任意字符
# egrep '\.5' datafile
找点五
# egrep '^[we]' datafile.txt
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
就找这个词
# egrep '\<[a-r].*n\>' 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