grep命令来搜索文本。通过在给定文件(目录)中搜索包含与给定字符串或单词匹配的行。
“grep”一词,来源于ed(文本编辑器)下的一个命令,名称来自于g/re/p(globally search a regular expression and print,以正则表达式进行全局查找以及打印)。在ed下,输入g/re/p这个命令后,会将所有符合先定义样式的字符串,以行为单位打印出来。
Linux 中的grep命令语法
grep 'word' 文件名–搜索文件名中包的任何word
grep -i 'bar' 文件名 –不区分大小写的搜索“ bar”一词
grep -R 'foo' . – 当前目录及其所有子目录中的所有文件中搜索单词“ foo”
grep -c 'hello' readme.md – 搜索并显示字符串“ hello”出现在名为readme.md的文件中的总次数。
在Linux上使用grep搜索文件
在/ etc / passwd文件中搜索xxx用户,输入:
grep xxx /etc/passwd
可以强制使用-i 参数忽略单词大小写:
grep -i "xxx" /etc/passwd
在这里插入图片描述
使用grep递归搜索文件
递归搜索文件,即在每个目录下的所有文件中搜索字符串“ 127.0.0.1”
sudo grep -r "127.0.0.1" /etc/
如果搜索到相关记录,那么在每一行都能看到结果。
(例如/etc/hosts:127.0.0.1localhost)。可以使用-h option以下方法禁止在输出数据中包含文件名:
grep -h -R "127.0.0.1" /etc/
使用grep仅搜索单词
当搜索某个词(比如:word)时,grep将匹配所有含有word的单词。您可以强制grep命令仅选择包含组成整个单词的匹配项的行,即仅完全匹配单词word:
grep -w "word" file
使用grep搜索2个不同的单词
egrep -w 'word1|word2' /path/to/file
单词匹配后如何计算行数
grep可以使用-c(count)选项计算有多少个匹配项:
grep -c 'word' /path/to/file
使用-n参数显示行号:
grep -n 'root' /etc/passwd
强制grep反转匹配
使用-v 参数 打印反转匹配;也就是说,仅匹配不包含给定单词的那些行。例如,打印不包含bar的所有行:
grep -v bar /path/to/file
Linux管道和grep命令
grep命令通常与shell管道命令(|)一起使用。在此示例中,显示硬盘设备的名称:
`dmesg | egrep '(s|h)d[a-z]'`
显示cpu型号名称:
cat /proc/cpuinfo | grep -i 'Model'
上述显示CPU型号的命令也可以按如下方式使用,这就无需结合管道命令:
grep -i 'Model' /proc/cpuinfo
仅列出匹配文件的名称
使用-l选项可以只列出含有匹配字符所在的文件夹名,而不用显示具体行。
比如下面的例子就是显示哪些C语言文件里面含有main的文件名:
grep -l 'main' *.c
Linux中的grep命令参数总结