如何在Linux / UNIX中使用grep命令
如何在Linux / UNIX中使用grep命令
grep命令来搜索文本。它在给定文件中搜索包含与给定字符串或单词匹配的行。它是Linux和类Unix系统上最有用的命令之一。让我们看看如何在Linux或类似Unix的系统上使用grep。
你知道吗?
名称“ grep”源自用于执行类似操作的命令,该命令使用Unix / Linux文本编辑器ed:
g/re/p
grep命令示例
常见grep命令在Linux中通过示例进行了解释:
- grep 'word' filename –在Linux上搜索包含文件名中单词的任何行
- grep -i 'bar' file1 –在Linux和Unix中不区分大小写的搜索“ bar”一词
- grep -R 'foo' . –在Linux中当前目录及其所有子目录中的所有文件中搜索单词“ foo”
- 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
示例输出:
foo:x:1000:1000:boo ,,,:/ home / boo:/ bin / ksh
您可以强制grep忽略单词大小写,即匹配boo,Boo,BOO和所有其他组合,并带有以下-i选项:使用cat命令
$ grep -i "boo" /etc/passwd
,最后一个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 /有线连接1:addresses1 = 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将匹配fooboo,boo123,barfoo35等。您可以强制grep命令仅选择包含组成整个单词的匹配项的行,即仅匹配boo单词:
$ grep -w "boo" file
如何使用grep搜索2个不同的单词
使用egrep命令,如下所示:
$ egrep -w 'word1|word2' /path/to/file
单词匹配后如何计算行数
grep可以使用-c(count)选项报告每个文件与该模式匹配的次数:
$ grep -c 'word' /path/to/file
将-n选项传递到输出的每一行之前,并在文本文件中获得该行的行号之前:
$ grep -n 'root' /etc/passwd
示例输出:
1:root:x:0:0:root:/ root:/ bin / bash
1042:rootdoor:x:0:0:rootdoor:/ home / rootdoor:/ bin / csh
3319:initrootapp:x:0:0:initrootapp:/ 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 |
我最喜欢的grep或egrep命令用法之一,用于过滤yum命令 / dpkg命令 / apt命令 / apt-get命令的输出:
dpkg --list | grep linux-image
yum search php | grep gd
apt search maria | egrep 'server|client'
Linux grep命令与Shell管道示例一起解释
如何仅列出匹配文件的名称?
使用-l选项列出其内容提及main()的文件名:
$ grep -l 'main' *.c
最后,您可以强制grep以彩色显示输出,输入:
$ grep --color vivek /etc/passwd
示例输出:
使用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手册页。