如何在Linux / UNIX中使用grep命令

如何在Linux / UNIX中使用grep命令

 

grep命令来搜索文本。它在给定文件中搜索包含与给定字符串或单词匹配的行。它是Linux和类Unix系统上最有用的命令之一。让我们看看如何在Linux或类似Unix的系统上使用grep

你知道吗?

名称“ grep”源自用于执行类似操作的命令,该命令使用Unix / Linux文本编辑器ed
g/re/p

grep命令示例

常见grep命令在Linux中通过示例进行了解释:

  1. grep 'word' filename –Linux上搜索包含文件名中单词的任何行
  2. grep -i 'bar' file1 –LinuxUnix中不区分大小写的搜索“ bar”一词
  3. grep -R 'foo' . –Linux中当前目录及其所有子目录中的所有文件中搜索单词“ foo”
  4. grep -c 'nixcraft' frontpage.md –搜索并显示字符串“ nixcraft”出现在名为frontpage.md的文件中的总次数。

Linux / Unix中的grep命令语法

语法如下:

grep 'word' filename

grep 'word' file1 file2 file3

grep 'string1 string2'  filename

cat otherfile | grep 'something'

command | grep 'something'

command option1 | grep 'data'

grep --color 'data' fileName

如何在Linux上使用grep搜索文件?

/ etc / passwd文件中搜索boo用户,输入:
$ grep boo /etc/passwd
示例输出:

foox10001000boo ,,,/ home / boo/ bin / ksh

您可以强制grep忽略单词​​大小写,即匹配booBooBOO和所有其他组合,并带有以下-i选项:使用cat命令
$ grep -i "boo" /etc/passwd
如何在Linux / UNIX中使用grep命令
,最后一个grep -i "boo" /etc/passwd也可以如下运行:
cat /etc/passwd | grep -i "boo"

如何递归使用grep

您可以递归搜索,即在每个目录下的所有文件中搜索字符串“ 192.168.1.5”
$ grep -r "192.168.1.5" /etc/

$ grep -R "192.168.1.5" /etc/
示例输出:

/ etc / ppp / options:#ms-wins 192.168.1.50

/ etc / ppp / options:#ms-wins 192.168.1.51

/ etc / NetworkManager / system-connections /有线连接1addresses1 = 192.168.1.5; 24; 192.168.1.2;

您将在单独的行上看到192.168.1.5的结果,并在其中找到文件的名称(例如/ etc / ppp / options)。可以使用-h option以下方法禁止在输出数据中包含文件名:
$ grep -h -R "192.168.1.5" /etc/

$ grep -hR "192.168.1.5" /etc/
示例输出:

ms-wins 192.168.1.50

ms-wins 192.168.1.51

地址1 = 192.168.1.5; 24; 192.168.1.2;

如何使用grep仅搜索单词

当您搜索boo时,grep将匹配foobooboo123barfoo35等。您可以强制grep命令仅选择包含组成整个单词的匹配项的行,即仅匹配boo单词:
$ grep -w "boo" file

如何使用grep搜索2个不同的单词

使用egrep命令,如下所示:
$ egrep -w 'word1|word2' /path/to/file

单词匹配后如何计算行数

grep可以使用-ccount)选项报告每个文件与该模式匹配的次数:
$ grep -c 'word' /path/to/file
-n选项传递到输出的每一行之前,并在文本文件中获得该行的行号之前:
$ grep -n 'root' /etc/passwd
示例输出:

1rootx00root/ root/ bin / bash

1042rootdoorx00rootdoor/ home / rootdoor/ bin / csh

3319initrootappx00initrootapp/ home / initroot/ bin / ksh

强制grep反转匹配

您可以使用-voption打印反转匹配;也就是说,它仅匹配不包含给定单词的那些行。例如,打印不包含单词栏的所有行:
$ grep -v bar /path/to/file

UNIX / Linux管道和grep命令

grep命令通常与外壳管道一起使用。在此示例中,显示硬盘设备的名称:
# dmesg | egrep '(s|h)d[a-z]'
显示cpu型号名称:
# cat /proc/cpuinfo | grep -i 'Model'
但是,上述命令也可以按以下方式使用,而无需外壳管道:
# grep -i 'Model' /proc/cpuinfo
示例输出:

型号:30

型号名称:Intel ( R ) Core ( TM ) i7 CPU Q 820   @ 1.73GHz

型号:30

型号名称:Intel ( R ) Core ( TM ) i7 CPU Q 820   @ 1.73GHz

我最喜欢的grepegrep命令用法之一,用于过滤yum命令 / dpkg命令 / apt命令 / apt-get命令的输出
dpkg --list | grep linux-image
yum search php | grep gd
apt search maria | egrep 'server|client'

如何在Linux / UNIX中使用grep命令Linux grep命令与Shell管道示例一起解释

如何仅列出匹配文件的名称?

使用-l选项列出其内容提及main()的文件名:
$ grep -l 'main' *.c
最后,您可以强制grep以彩色显示输出,输入:
$ grep --color vivek /etc/passwd
示例输出:

如何在Linux / UNIX中使用grep命令使用Grep命令

结论

Unix / Linux摘要中的grep命令如下:

Linux grep命令选项

描述

-i

忽略Linux和Unix上的区分大小写

-w

强制PATTERN仅匹配整个单词

-v

选择不匹配的行

-n

使用输出行打印行号

-h

在输出中取消Unix文件名前缀

-r

在Linux上递归搜索目录

-R

就像-r一样,但是遵循所有符号链接

-l

仅打印具有选定行的FILE名称

-c

每个文件仅打印选定行的数量

--color

以颜色显示匹配的图案

如果您喜欢grep教程,那么您可能想阅读我们的“ Grep中的正则表达式 ”教程。您可以在此处查看gnu grep手册页。