Shell学习15天(grep详解)- 09day

自古美人都是妖i 提交于 2020-02-21 04:47:55

(一) grep 家族

grep, egrep, fgrep - 打印匹配给定模式的行

总览 SYNOPSIS
       grep [options] PATTERN [FILE...]
       grep [options] [-e PATTERN | -f FILE] [FILE...]

描述 DESCRIPTION

grep  :  搜索以  FILE  命名的文件输入  (或者是标准输入,如果没有指定文件名,或者给出的文件名是 - 的话),寻找含有与给定的模式 PATTERN 相匹配的内容的行。 默认情况下,  grep 将把含有匹配内容的行打印出来。

       另外,也可以使用两个变种程序 egrep 和 fgrep 。 Egrep 与 grep -E 相同。 Fgrep 与 grep -F 相同。

egrep:  扩展grep,将模式 PATTERN 作为一个扩展的正则表达式来解释

fgrep:   固定grep(fixed grep) ,快速grep (fast grep),它按照字面解释所有字符。

以上的 \w \W \b 是grep里面的,不是正则里面的。

 

(二) grep 命令使用

grep 程序的输入可以来自标准输入或管道,而不仅仅是文件,例如:

2.1 标准输入:

2.2 管道

pa aux | grep 'sshd'

2.3 文件

grep 'alice' /etc/passwd    /etc/shadow  /etc/group  /etc/gshadow

另外grep命令返回值:

#grep 'Tom' /etc/passwd

找到: grep返回的退出状态为0

没找到: grep返回的退出状态为1

找不到指定文件: grep返回的退出状态为2

(三) grep命令出常用选项

下面的原因是未转义-之前,grep把-v当选项了。就以为你没有给模式。

[hujianmei@localhost days_09]$ grep --help | grep '-v'
用法: grep [选项]... PATTERN [FILE]...
试用‘grep --help’来获得更多信息。
[hujianmei@localhost days_09]$ grep --help | grep 'v'
  -v, --invert-match        select non-matching lines
  -V, --version             display version information and exit
  -a, --text                equivalent to --binary-files=text
  -I                        equivalent to --binary-files=without-match
  -D, --devices=ACTION      how to handle devices, FIFOs and sockets;
  -r, --recursive           like --directories=recurse
  -R, --dereference-recursive
                            WHEN is 'always', 'never', or 'auto'
[hujianmei@localhost days_09]$ grep --help | grep '\-v'
  -v, --invert-match        select non-matching lines
  -V, --version             display version information and exit
[hujianmei@localhost days_09]$ grep --help | egrep '-v'
用法: grep [选项]... PATTERN [FILE]...
试用‘grep --help’来获得更多信息。
[hujianmei@localhost days_09]$ grep --help | grep '\-v'
  -v, --invert-match        select non-matching lines
  -V, --version             display version information and exit
[hujianmei@localhost days_09]$ 
[hujianmei@localhost days_09]$ 查看匹配行的前2行^C
[hujianmei@localhost days_09]$ grep -B2 'hujianmei' /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
hujianmei:x:1000:1000:hujianmei:/home/hujianmei:/bin/bash
[hujianmei@localhost days_09]$ 查看匹配行的后两行^C
[hujianmei@localhost days_09]$ grep -A2 'hujianmei' /etc/passwd
hujianmei:x:1000:1000:hujianmei:/home/hujianmei:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
[hujianmei@localhost days_09]$ 查看匹配行的上下2行^C
[hujianmei@localhost days_09]$ grep -C2 'hujianmei' /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
hujianmei:x:1000:1000:hujianmei:/home/hujianmei:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
[hujianmei@localhost days_09]$ 

[hujianmei@localhost days_09]$ grep -n 'hujianmei' /etc/passwd
45:hujianmei:x:1000:1000:hujianmei:/home/hujianmei:/bin/bash
[hujianmei@localhost days_09]$ 
[hujianmei@localhost days_09]$ 
[hujianmei@localhost days_09]$ 用vim打开时指定跳转到那一行^C
[hujianmei@localhost days_09]$ vim /etc/passwd +50
[hujianmei@localhost days_09]$ 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!