10 Dec 2014
作用:主要用于查询功能的字符串处理工具
语法:grep [参数] '查询关键字' file
参数:
-c 打印符合要求的行数-n 在输出符合要求的行的同时连同行号一起输出-v 取反,输出不符合要求的行-A n after 表示将每条符合要求的记录之后n行一同输出-B n before表示将每条符合要求的记录之前n行一同输出-C n 相当于A和B的组合,表示将每条符合要求的记录前后n行一同输出-r 会把目录下面所有的文件全部遍历-q 并不输出内容,只返回结果值-o 只返回匹配的关键字-l 只返回包含此字符串的文件或来源正规表示法适配: 默认是基本的正规表示法,”-E”后变成egrep,支持扩展正规表示法
用法举例:
# 用"-r"参数搜索目录下所有文件中的字符串 # 搜索fugai目录下所有文件中有"root"的行 grep -nr "root" fugai fugai/pass:1:root:x:0:0:root:/root:/bin/bash fugai/pass:11:operator:x:11:0:operator:/root:/sbin/nologin fugai/pass1:1:root:x:0:0:root:/root:/bin/bash fugai/pass1:11:operator:x:11:0:operator:/root:/sbin/nologin # 用"-c"参数来统计符合条件结果的行数 grep -c 'root' /etc/passwd 2 # 参数"-A"、"-B"和"-C"范例 # 匹配行行号后面是":" # 而"-A"、"-B"、"-C"参数匹配的两行用的是"-" # 指定匹配行后两行输出 grep -n -A2 'root' /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 2-bin:x:1:1:bin:/bin:/sbin/nologin 3-daemon:x:2:2:daemon:/sbin:/sbin/nologin -- 11:operator:x:11:0:operator:/root:/sbin/nologin 12-games:x:12:100:games:/usr/games:/sbin/nologin 13-gopher:x:13:30:gopher:/var/gopher:/sbin/nologin # 指定匹配行前两行输出 grep -n -B2 'root' /etc/passwd 1:root:x:0:0:root:/root:/bin/bash -- 9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10-uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin 11:operator:x:11:0:operator:/root:/sbin/nologin # A和B参数的合体,-C前后两行都输出 grep -n -C2 'root' /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 2-bin:x:1:1:bin:/bin:/sbin/nologin 3-daemon:x:2:2:daemon:/sbin:/sbin/nologin -- 9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10-uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin 11:operator:x:11:0:operator:/root:/sbin/nologin 12-games:x:12:100:games:/usr/games:/sbin/nologin 13-gopher:x:13:30:gopher:/var/gopher:/sbin/nologin # 匹配IP或电话号码 echo -e "192.168.0.1\n192.0.1" 192.168.0.1 192.0.1 # 两种方式来匹配ip echo -e "192.168.0.1\n192.0.1" | \ > grep -E "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" 192.168.0.1 echo -e "192.168.0.1\n192.0.1" | \ > grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' 192.168.0.1 # 因为bash使用的是标准的POSIX正则,所以\d匹配数字是无效的 # 反而是vim工具内部支持\d匹配数字,详情可参照12.1编码符号含义 # grep的-q和-o参数 # -q参数,不打印匹配字符串,只返回成功值 grep -q "root" /etc/passwd && echo "done" || echo "failed" done # -o参数,只打印匹配的字符 grep -o 'roo' /etc/passwd roo roo roo roo
铭哥分享的例子
grep -n ‘root’ 1.txt (关键字,行号)
grep -n -v ‘root’ 1.txt (关键字,行号,取反)
grep ‘[0-9]’ 1.txt (包含数字的行)
grep -v ‘[0-9]’ 1.txt (包含数字的行,取反)
grep -v ‘^#’ 1.txt (#开头的行,取反)
grep -v ‘^$’ 1.txt|grep -v ‘^#’ (空行与#开头的行,取反)
grep ‘^[a-zA-Z]’ 1.txt (以字母开头的行)
grep ‘^[^0-9]’ 1.txt (首字母不是数字的行)
grep ‘r.o’ 1.txt; grep ‘r*t’ 1.txt; grep ‘r.*t’ 1.txt
grep ‘o{2}’ 1.txt (o重复两次)
介绍:
egrep等同于”grep -E”,变化为支持扩展正规表示法,并且不用脱意
其他用法与grep相同