linux三剑客之grep
作用
文本过滤器(根据文本内容过滤文件)
格式
grep [参数] [匹配规则] [操作对象]
参数
1 -n : 过滤文本时,将过滤出来的内容在文件内的行号显示出来 2 -A : 匹配成功之后,将匹配行的后n行显示出来 3 -B : 匹配成功之后,将匹配行的前n行显示出来 4 -C : 匹配成功之后,将匹配行的前后各n行显示出来 5 -c : 只显示匹配成功的行数 6 -o : 只显示匹配成功的内容 7 -v : 反向过滤 8 -q : 静默输出 9 -i : 忽略大小写 10 -l : 匹配成功之后,将文本的名称打印出来 11 -R|-r : 递归匹配 12 -E : 使用拓展正则 等价于 egrep
知识储备
$? : 上一行命令执行的结果,0代表执行成功,其他数字代表执行失败。 wc : 匹配行数 -l : 打印匹配行数 -c : 打印匹配的字节数
案例
案例1:在/etc/passwd文件中,匹配以ftp开头的行 grep '^ftp' /etc/passwd 案例2:在/etc/passwd文件中,匹配以bash结尾的行 grep 'bash$' /etc/passwd 案例3:匹配本机中有哪些ip ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' 案例4:要求将/etc/fstab中的去掉包含 # 开头的行,且要求 # 后至少有一个空格 grep -vE '^#\ +' /etc/fstab 案例5:找出文件中至少有一个空格的行 grep -E '\ +' xxx 案例6:将 nginx.conf 文件中以#开头的行和空行,全部删除 grep -vE '^\ *#|^$' /etc/nginx/nginx.conf 案例7:过滤出手机号 [root@localhost ~]# echo "18612345678" |grep -E "(155|186|177)[0-9]{8}" 18612345678 案例8:过滤出邮箱 [root@localhost ~]# echo "yuanshi@qq.com" | grep -E "[0-9a-zA-Z]+@[0-9a-z]+(\.com|\.cn|\.edu)" yuanshi@qq.com