Linux三剑客命令之grep

  • Post author:
  • Post category:linux


Linux中最重要的三个命令在业界被称为“

三剑客

”,它们是awk,sed,grep

grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来

终端输入grep –help可以看到所有的语法参数,翻译了部分,举例一些常用的实例

左边为参数简写,中间为全英文,后面为自己翻译或者网上摘译,实例选取使用广的/etc/passwd,引文里面用户太多,有些只截取了部分,

标记浅蓝色的参数是最为常用的



一、正则表达式选择与解释:




-E, –extended-regexp      将样式为延伸的正则表达式来使用

可以同时增加多个关键字”root””sshd”···········

[root@master ~]# grep -E ‘root|sshd’ /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

-F, –fixed-strings        将样式视为固定字符串的列表

-G, –basic-regexp        将样式视为普通的表示法来使用。

-P, –perl-regexp         PATTERN 是一个 Perl 正则表达式

-e, –regexp=PATTERN       指定字符串做为查找文件内容的样式

-f, –file=FILE           指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。


-i, –ignore-case         忽略大小写

筛选关键字ftp,包含FTP

[root@master ~]# grep -i ftp /etc/passwd


ftp

:x:14:50:

FTP

User:/var/

ftp

:/sbin/nologin


-w, –word-regexp         只显示全字符合的列。

只显示整个单词是ftp的行

[root@master ~]# grep -w ft /etc/passwd

[root@master ~]# grep -w ftp /etc/passwd

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

-x, –line-regexp         只显示全列符合的列。

-z, –null-data           一个 0 字节的数据行,但不是空行



二、杂项:



-s, –no-messages         不显示错误信息。


-v, –invert-match        显示不包含匹配文本的所有行。

将/etc/passwd,将没有出现 root 和nologin的行取出来

[root@master sys]# grep -v root /etc/passwd | grep -v nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

-V, –version             显示版本信息。



三、输出控制:




-m, –max-count=NUM       NUM 次匹配后停止

筛选关键字nologin,到第2次的时候停止

[root@master ~]# grep -m 2 nologin /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

-b, –byte-offset         输出的同时打印字节偏移


-n, –line-number         输出的同时打印行号

将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号

[root@master sys]# grep -n root /etc/passwd


1

:root:x:0:0:root:/root:/bin/bash


10

:operator:x:11:0:operator:/root:/sbin/nologin


-H, –with-filename       为每一匹配项打印文件名

[root@master ~]# grep -H nologin /etc/passwd


/etc/passwd

:bin:x:1:1:bin:/bin:/sbin/nologin


/etc/passwd

:daemon:x:2:2:daemon:/sbin:/sbin/nologin


/etc/passwd

:adm:x:3:4:adm:/var/adm:/sbin/nologin


/etc/passwd

:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

-h, –no-filename         输出时不显示文件名前缀

–label=LABEL         将LABEL 作为标准输入文件名前缀


-o, –only-matching       只显示匹配关键字 部分。

只显示匹配关键字root的内容

[root@master ~]# grep -o root /etc/passwd

root

root

root

root

-q, –quiet, –silent     不显示任何信息。

-a, –text                不要忽略二进制的数据。


-I                        显示筛选关键字的文件名

显示文件里有没指定关键字,有的话显示文件名

[root@master ~]# grep -l root /etc/passwd

/etc/passwd

[root@master ~]# grep -l song /etc/passwd

[root@master ~]#

-d, –directories=ACTION  当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。

-D, –devices=ACTION      how to handle devices, FIFOs and sockets;

ACTION is ‘read’ or ‘skip’


-r, –recursive           查找文件中指定参数,常用命令

查找/etc下文件中包含

first_yunwei

这个文本的文件

[root@master ~]# grep -r first_yunwei /etc/

/etc/gshadow:first_yunwei:!::

/etc/passwd-:first_yunwei:x:1003:1003:运维部:/home/first_yunwei:/bin/bash

/etc/group-:first_yunwei:x:1003:

/etc/gshadow-:first_yunwei:!::

-L, –files-without-match 列出文件内容不符合指定的样式的文件名称。

-l, –files-with-matches  列出文件内容符合指定的样式的文件名称。


-c, –count               计算符合样式的列数。

文件中有关键字 first_yunwei有几行

[root@master ~]# grep -c first_yunwei /etc/passwd

1

-T, –initial-tab         make tabs line up (if needed)

-Z, –null                FILE名字后打印0字节



四、文件控制:




-B, –before-context=NUM   除了显示符合样式的那一行之外,并显示该行之前的内容

显示关键字root前再加1行内容,如果是2就多显示两行内容

[root@master ~]# grep -B 1 root /etc/passwd

root:x:0:0:root:/root:/bin/bash



mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin


-A, –after-context=NUM   除了显示符合范本样式的那一列之外,并显示该行之后的内容。

显示关键字root后再加1行内容,如果是2就多显示两行内容

[root@master ~]# grep -A 1 root /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin



operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin


-C, –context=NUM         除了显示符合样式的那一行之外,并显示该行之前后的内容。

显示关键字root前后再加1行内容,如果是2就多显示两行内容

[root@master ~]# grep -C 1 root /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin



mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

-U, –binary               不去掉 EOL(MSDOS)处的 CR 字符

-u, –unix-byte-offsets   如果 CR 不在那里(MSDOS),报告偏移值



五、最常用实例用管道符筛选

将/etc/passwd,有出现 root 的行取出来

[root@master ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@master ~]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin



版权声明:本文为icanflyingg原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。