lsof |grep delete卡住_grep——用过都说好的Linux搜索神器

6bc31aa3b5ecbbc5e961355e2b763d61.png

如果要说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中查找匹配wordgrep 'word' file1 file2 file3   #在file1 file2 file3中查找匹配wordcat otherfile | grep 'something'   #将otherfile中的内容打印到终端,然后使用grep匹配其内容是否有somethingcommand | grep 'something'   #command命令的结果中查找是否含有字符串somethinggrep --color[=never/auto/always] 'data' filename   #在filename文件中找出字符串data,并由color参数确定颜色高亮
如何在Linux上使用grep搜索文件?

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

grep bruce /etc/passwd

034248270c1ea1685226b688f05290f5.png

可以强制使用-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/

示例输出:

fd642c64b5e032a552a3c08a38f2dd8e.png

如果搜索到相关记录,那么在每一行都能看到结果。

(例如/etc/hosts:127.0.0.1localhost)。可以使用-h option以下方法禁止在输出数据中包含文件名:

grep -h -R "127.0.0.1" /etc/

grep -hR "127.0.0.1" /etc/

示例输出:

c2d8c6d451b46a0f0573653243e427e0.png

如何使用grep仅搜索单词

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

grep -w "word" file

129882f467be9df0edf22eee4c56f78d.png

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

使用egrep命令,如下所示:

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

7ecc2960c5c2f7454d577eb461b1070c.png

单词匹配后如何计算行数

grep可以使用-c(count)选项计算有多少个匹配项:

grep -c 'word' /path/to/file

使用-n参数显示行号:

grep -n 'root' /etc/passwd

72c5aca4f0f778038fd695433a883b0a.png

强制grep反转匹配

您可以使用-v 参数 打印反转匹配;也就是说,仅匹配不包含给定单词的那些行。例如,打印不包含bar的所有行

grep -v bar /path/to/file

5f610f007fe63dcb9f34bf3dabcd7c3f.png

Linux管道和grep命令

grep命令通常与shell管道命令(|)一起使用。在此示例中,显示硬盘设备的名称:

dmesg | egrep '(s|h)d[a-z]'

显示cpu型号名称:

cat /proc/cpuinfo | grep -i 'Model'

6a63858439bed71d39c051a5780a259e.png

上述显示CPU型号的命令也可以按如下方式使用,这就无需结合管道命令:

grep -i 'Model' /proc/cpuinfo
如何仅列出匹配文件的名称?

使用-l选项可以只列出含有匹配字符所在的文件夹名,而不用显示具体行。

比如下面的例子就是显示哪些C语言文件里面含有main的文件名:

grep -l 'main' *.c

a43483fb854f745de77a9829a226244c.png

Linux中的grep命令参数总结

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

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

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

-w

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

a946cb4f8d53de266d6bb62a7f3cf40f.png

240dbe1b6021dc7c8e52174b6da7c79c.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值