迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

Linux提取命令grep(二)

作者:迹忆 最近更新:2022/12/11 浏览次数:

本篇承接 linux提取命令grep(一),继续介绍grep命令的选项及其用法。

选项二

这组我们主要介绍对grep输出信息的进行控制的选项。

-m 当显示的行数达到该选项指定的行数限制的时候即停止输出。也就是说如果-m指定显示行数最大为3,如果检索出来的结果有4行,那也只显示前三行。

$ grep mail –m 1 /etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin  # 只显示一行结果,通过前面的例子我们知道其实含有mail字符串的一共有两行数据。
# or
$ grep mail –max-count=1 /etc/passwd    # -m NUM  <=> --max-count=NUM
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin # 同样结果也是一行

-n 在输出被检索到的字符串的数据之前同时在前面显示每行数据所在的行号。

$ grep mail –n /etc/passwd
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
22:mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
# 这两行数据是其在/etc/passwd中所在的行号

-b 匹配到字符串的那些行所在的起始位置,该位置是以字节为单位计算的。意思是说,在改行数据之前有230个字节的数据,那该行的起始位置就是230。

$ grep mail –b /etc/passwd
293:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
877:mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin

-o 只显示匹配的字符串

$ grep mail –o /etc/passwd
mail
mail
mail
mail

-H 在显示的信息前面加上文件名作为前缀,对于检索单个文件来说,默认情况下不用文件名作为前缀。而该选项就是在前面加上文件名作为前缀。

$ grep mail –H /etc/passwd
/etc/passwd:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
/etc/passwd:mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin

-h 该选项和-H的功能正相反,是取出文件名作为前缀。该选项用于多文件检索的时候,因为单文件检索默认情况下是没有文件名前缀的。

$ grep mail /etc/passwd /etc/group
/etc/passwd:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
/etc/passwd:mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
/etc/group:mail:x:12:mail
/etc/group:mailnull:x:47:
# 多文件检索会在每一行前面加上改行所在的文件名作为前缀
$ grep mail –h /etc/passwd /etc/group
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
mail:x:12:mail
mailnull:x:47:
# 此时结果中就没有文件名的前缀了

-q 不显示标准输出的信息,即使检索到字符串也不会显示。该选项和-s有点类似,-s是将标准错误输出给屏蔽掉,而该选项是屏蔽标准输出信息。

$ grep mail –q /etc/passwd
# 结果为空
$ grep mail –q /etc/passwd /etc/passwds
grep: /etc/passwds: No such file or directory
# 我们看,对于错误信息-q并不会屏蔽
$ grep mail –qs /etc/passwd /etc/passwds
# 什么也不显示,标准输出和标准错误输出都被屏蔽掉了

-c 小写c,显示匹配到指定字符串的行数

$ grep mail –c /etc/passwd
2

-d ACTION 如果输入文件是一个目录,我们要使用该选项后面跟上ACTION来处理。ACTION的默认值是read,表示目录就像普通文件一样被读取;如果ACTION是skip,那么就会跳过该目录;如果ACTION是recurse,grep就会读取该目录下的所有的文件作为数据源(相当于grep的-r选项)。针对recurse我们举一个例子——查找/etc目录下的所有文件的内容,检索包含以mail作为开头的行数据

$ grep ^mail –d recurse /etc
/etc/passwd:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
/etc/passwd:mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
/etc/mail/helpfile:mail MAIL From:<sender> [ <parameters> ]
/etc/mail/helpfile:mail         Specifies the sender.  Parameters are ESMTP extensions.
/etc/mail/helpfile:mail         See "HELP DSN" for details.
……
# 等价于
$ grep ^mail –r /etc
# 结果相同。

同时我们在这里也顺便介绍了-r选项的用法。还有复习-h选项的用途,因为检索了目录的所有文件,所以会在每行结果前加上文件名作为前缀。可以用-h去掉

$ grep ^mail –hd recurse /etc  # 这里注意 h和d的顺序
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
mail    MAIL From:<sender> [ <parameters> ]
mail            Specifies the sender.  Parameters are ESMTP extensions.
mail            See "HELP DSN" for details.
mail.*                                                  -/var/log/maillog
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
mail:*:16619:0:99999:7:::
mailnull:!!:16619:0:99999:7:::
…..

-D ACTION 该选项和-d基本相同,只是输入文件是一个设备的时候(FIFO或者socket)使用该选项,其ACTION和-d的相同,只是没有recurse。这里就不再举例子。

-a 将binary 文件以text文件的方式检索数据

-I 大写的I 忽略binary文件

查找pdo下面所有文件,检索出含有main的数据。

$ grep main –a –r /software/php-5.5.23 /ext/pdo 
# pdo下面的二进制文件会被当做普通文本文件来检索  相当于–binary-files=text。
$ grep main –binary-files=text –r /software/php-5.5.23 /ext/pdo
# 结果同-a相同

对于pdo下面的二进制文件会进行忽略

$ grep main –I –r /software/php-5.5.23 /ext/pdo
# 相当于 –binary-files=without-match
$ grep main –binary-files=without-match –r /software/php-5.5.23 /ext/pdo
# 结果同-I 相同

-L 同-l相反,显示文件内容不包含检索字符串的文件名 等价于 --files-without-match

-l 显示包含检索字符串的数据所在的文件的文件名 等价于 --files-with-matches

$ grep main -l -r /software/php-5.5.23/ext/ftp
/software/php-5.5.23/ext/ftp/package.xml
# 或者
$ grep main --files-with-matches -r /software/php-5.5.23/ext/ftp
# 结果同上
$ grep main –L –r /software/php-5.5.23/ext/ftp
/software/php-5.5.23/ext/ftp/php_ftp.h
/software/php-5.5.23/ext/ftp/tests/006.phpt
/software/php-5.5.23/ext/ftp/tests/ftp_exec_basic.phpt
/software/php-5.5.23/ext/ftp/tests/ftp_nb_get_large.phpt
/software/php-5.5.23/ext/ftp/tests/ftp_get_basic.phpt
….
# 部分结果,所有的显示结果中唯独没有/software/php-5.5.23/ext/ftp/package.xml这个文件
# 或者
$ grep main --files-without-match –r /software/php-5.5.23/ext/ftp

-A NUM在检索到的结果后面添加NUM行数据,这些数据就是目标行数据下面挨着的NUM行数据

-B NUM 同-A相反,是在结果前面添加NUM行数据

-C NUM 在结果前后都添加NUM行数据

$ grep mail –B 1 /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
--
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
$ grep mail –A 1 /etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
--
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
$ grep mail –C 1 /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
--
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin

本篇先介绍这些选项,其余的选项我们在 linux提取命令grep(三) 中介绍。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 Linux 中更新 YUM

发布时间:2023/05/04 浏览次数:82 分类:操作系统

本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。

在 Linux 中安装 Deb 文件

发布时间:2023/05/04 浏览次数:130 分类:操作系统

本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。

Linux 中的 lsof 命令

发布时间:2023/05/04 浏览次数:82 分类:操作系统

在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。

Linux 中的 ps aux 命令

发布时间:2023/05/04 浏览次数:69 分类:操作系统

本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。

Linux 中的 NTP

发布时间:2023/05/04 浏览次数:137 分类:操作系统

本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。

在 Linux 中计算文件中的唯一行

发布时间:2023/05/04 浏览次数:70 分类:操作系统

计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便