Linux中的Grep呼吁(在文件中查找文本)

grep呼吁是(global regular expression print,全局正则表达式输出)的缩写,它是Linux中成果最强大且最常用的呼吁之一。

grep在一个或多个输入文件中搜索与给定模式匹配的行,并将每条匹配行写入尺度输出。 假如未指定文件,则grep将从尺度输入读取,该输入凡是是另一个呼吁的输出。

在本文中,我们将通过实际示例和最常见的GNU grep选项的具体说明,向您展示如何利用grep呼吁。

grep呼吁语法

grep呼吁的语法如下:

grep [OPTIONS] PATTERN [FILE...]

方括号中的项目是可选的。

OPTIONS - 零个或多个选项。 Grep包括很多节制其行为的选项。

PATTERN - 搜索模式。

FILE - 零个或多个输入文件名。

为了可以或许搜索文件,运行呼吁的用户必需对该文件具有读取权限。

在文件中搜索字符串

grep呼吁最根基的用法是在文件中搜索字符串(文本)。

譬喻,要显示/etc/passwd文件中包括字符串bash的所有行,请运行以下呼吁:

[linuxidc@localhost ~/www.linuxidc.com]$ grep bash /etc/passwd

输出应如下所示:

Linux中的Grep呼吁(在文件中查找文本)

假如字符串包括空格,则需要将其用单引号或双引号引起来:

[linuxidc@localhost ~/www.linuxidc.com]$grep "Gnome Display Manager" /etc/passwd

反转匹配(解除)

要显示与模式不匹配的行,请利用-v(或--invert-match)选项。

譬喻,要打印不包括字符串nologin的行,可以利用:

[linuxidc@localhost ~/www.linuxidc.com]$grep -v nologin /etc/passwd

Linux中的Grep呼吁(在文件中查找文本)

利用Grep过滤呼吁的输出

可以利用grep通过管道过滤呼吁的输出,而且只有与给定模式匹配的行才会打印在终端上。

譬喻,要找出哪些系统以用户www-data的身份在系统上运行,可以利用以下ps呼吁:

[linuxidc@localhost ~/www.linuxidc.com]$ps -ef | grep www-data
linuxidc  3980  3865  0 22:26 pts/1    00:00:00 grep --color=auto www-data

您也可以在呼吁中链接多个管道。 如您在上面的输出中看到的,尚有一行包括grep历程。 假如您不但愿显示该行,则将输出通报到另一个grep实例,如下所示。

[linuxidc@localhost ~/www.linuxidc.com]$ps -ef | grep www-data | grep -v grep

递归搜索

要递归搜索模式,请利用-r选项(或--recursive)挪用grep。 利用此选项时,grep将搜索指定目次中的所有文件,并跳过递归碰着的标记链接。

要跟从所有标记链接,请利用-R选项(或--dereference-recursive),而不是-r。

这是显示如安在/etc目次内的所有文件中搜索字符串linuxidc的示例:

[root@localhost /home/linuxidc/www.linuxidc.com]$grep -r linuxidc /etc

输出将包括以文件的完整路径为前缀的匹配行:

Linux中的Grep呼吁(在文件中查找文本)

假如利用-R选项,则grep将跟从所有标记链接:

[root@ ]$grep -R linuxidc.com /etc

留意下面输出的最后一行。 当用-r挪用grep时,不会打印该行,因为Nginx启用站点的目次中的文件是指向可用站点目次中的设置文件的标记链接。

/etc/hosts:127.0.0.1 node2.linuxidc.com

/etc/nginx/sites-available/linuxidc.com:    server_name linuxidc.com  ;
/etc/nginx/sites-enabled/linuxidc.com:    server_name linuxidc.com  ;

仅显示文件名

要打消默认grep输出并仅打印包括匹配模式的文件名,请利用-l(或--files-with-matches)选项。

以下呼吁在当前事情目次中搜索所有以.conf末了的文件,并仅显示包括字符串linuxidc.com的文件的名称:

$grep -l linuxidc.com *.conf

输出将如下所示:

tmux.conf
haproxy.conf

-l选项凡是与递归选项-R团结利用:

$grep -Rl linuxidc.com /tmp

不区分巨细写的搜索

默认环境下,grep区分巨细写。 这意味着将大写和小写字符视为差异的字符。

要在搜索时忽略巨细写,请利用-i选项(或--ignore-case)挪用grep。

譬喻,当搜索不带任何选项的Zebra时,以下呼吁将不显示任何输出,即有匹配的行:

$grep Zebra /usr/share/words

可是,假如利用-i选项执行不区分巨细写的搜索,则它将同时匹配巨细写字母:

$grep -i Zebra /usr/share/words

指定“ Zebra”将匹配该字符串的“ zebra”,“ ZEbrA”或任何其他巨细写字母组合。

zebra
zebra's
zebras

搜索全词

搜索字符串时,grep将显示该字符串嵌入较大字符串中的所有行。

譬喻,假如您搜索“ gnu”,则将以较大的单词(譬喻“ cygnus”或“ magnum”)嵌入“ gnu”的所有行都将匹配:

$grep gnu /usr/share/words

cygnus
gnu
interregnum
lgnu9d
lignum
magnum
magnuson
sphagnum
wingnut

要仅返回指定字符串是整个单词(用非单词字符括起来)的那些行,请利用-w(或--word-regexp)选项。

文字字符包罗字母数字字符(a-z,A-Z和0-9)和下划线(_)。 所有其他字符均视为非单词字符。

假如您运行与上述沟通的呼吁,包罗-w选项,则grep呼吁将仅返回个中包括gnu作为单独单词的那些行。

$grep -w gnu /usr/share/words

gnu

显示行号

-n(或--line-number)选项汇报grep显示包括与模式匹配的字符串的行的行号。 利用此选项时,grep将匹配项打印到以行号为前缀的尺度输出。

譬喻,要显示/etc/services文件中的包括字符串bash并带有匹配行号的行,可以利用以下呼吁:

[linuxidc@localhost etc]$ grep -n 10000 /etc/services

下面的输出显示在行10423和10424上找到匹配项。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdjgx.html