grep——用过都说好的Linux搜索神器

Linux 3月前 260

如果要说Linux上有什么命令是值得学习和使用的,那么grep一定是值得推荐的。

在文本搜索的时候,这个命令是非常有用,可以节省很多时间。

当然,由于过于依赖这些命令,小编这几年在文档整理这块做的越来越懒散,通常都把所有的都集中放,需要使用时,用命令搜索关键词就行?

是不是有疑问,切换到windows系统咋办?

没关系!windows也有可以实现类似于grep命令的功能软件-dngrep,妈妈再也不用担心我找不到文件了!





什么是grep?





grep命令来搜索文本。通过在给定文件(目录)中搜索包含与给定字符串或单词匹配的行。它是Linux和Unix系统中最有用的命令之一。

“grep”一词,来源于ed(文本编辑器)下的一个命令,名称来自于g/re/p(globally search a regular expression and print,以正则表达式进行全局查找以及打印)。在ed下,输入g/re/p这个命令后,会将所有符合先定义样式的字符串,以行为单位打印出来。

Linux 中的grep命令语法


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


grep语法的常见使用场景如下:


grep 'word' filename   #在filename中查找匹配word
grep 'word' file1 file2 file3   #在file1 file2 file3中查找匹配word
cat otherfile | grep 'something'   #将otherfile中的内容打印到终端,然后使用grep匹配其内容是否有something
command | grep 'something'   #command命令的结果中查找是否含有字符串something
grep --color[=never/auto/always] 'data' filename   #在filename文件中找出字符串data,并由color参数确定颜色高亮





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






在/ etc / passwd文件中搜索bruce用户,输入:


grep bruce /etc/passwd

可以强制使用-i 参数忽略单词大小写,即匹配bruce,Bruce,BRUCE和所有其他组合:


grep -i "bruce" /etc/passwd





如何使用grep递归搜索文件






您可以递归搜索,即在每个目录下的所有文件中搜索字符串“ 127.0.0.1


sudo grep -r "127.0.0.1" /etc/


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 -hR "127.0.0.1" /etc/

示例输出:

 




如何使用grep仅搜索单词






当搜索某个词(比如:word)时,grep将匹配所有含有word的单词。您可以强制grep命令仅选择包含组成整个单词的匹配项的行,即仅完全匹配单词word:


grep -w "word" file




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





使用egrep命令,如下所示:


egrep -w 'word1|word2' /path/to/file

A




单词匹配后如何计算行数






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命令参数总结





通过上面的列子,可以总结出下面的grep命令常见的参数使用表。

虽然本文说的是Linux系统,但是grep命令同样适用于类Unix系统,
所以,如果你有macOS系统的话,也可以说使用的哦。


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

-w

强制仅匹配整个单词
-v
选择不匹配的行
-n
 打印出行号
-h
在输出中取消文件名路径
-r
递归搜索目录
-R
递归搜索目录但是遵循所有符号链接
-I
仅显示具有选定行的文件名称
-c
每个文件仅显示选定行的数量
--color
以颜色显示匹配的图案




最新回复 (0)
返回
发新帖
声明:网站中可能存在第三方网站链接,如有侵权,请联系我们aomeikeji@qq.com删除;破解软件仅供学习交流,下载后24小时内删除。