grep 实战用法

grep 的全称是 global regular expression print,在 Linux 诸多命令行工具中可以说是最强大,最经常使用的。我们可以用 grep 来找到需要的文本信息。

 

搜索文件名

在某个目录下,寻找匹配某个名称的文件,可以结合 lsgrep 的能力来做。

$ ls -l | grep employee

-rw-r--r--   1 bytedance  staff       209  8 28 23:47 employee.txt

在多个文件中寻找字符串

基本格式为

grep “string” filename1 filename2

为此我们将 employee.txt 拷贝一份,叫做 empbackup.txt,看看查找 "sale" 字符串的结果

$ grep sale employee.txt empbackup.txt

employee.txt:varun manager sales 50000
employee.txt:tarun peon sales 15000
employee.txt:deepak clerk sales 23000
employee.txt:sunil peon sales 13000
empbackup.txt:varun manager sales 50000
empbackup.txt:tarun peon sales 15000
empbackup.txt:deepak clerk sales 23000
empbackup.txt:sunil peon sales 13000

通配符

其实多个文件的场景,如果前后缀一样,我们可以直接用 * 来代替。将上面的命令替换成:

$ grep sale emp*

empbackup.txt:varun manager sales 50000
empbackup.txt:tarun peon sales 15000
empbackup.txt:deepak clerk sales 23000
empbackup.txt:sunil peon sales 13000
employee.txt:varun manager sales 50000
employee.txt:tarun peon sales 15000
employee.txt:deepak clerk sales 23000
employee.txt:sunil peon sales 13000

忽略大小写

grep 支持忽略大小写的 flag 有三种写法:

  • -i
  • -y
  • --ignore-case

通常情况下我们会使用 -i 比较多。

我们把 employee.txt 中的 tarun 改成 Tarun 看一下:

$ grep tarun employee.txt

此时没有数据返回。

$ grep -i tarun employee.txt

Tarun peon sales 15000

数据返回,符合预期。


上色

还是上面的正则的例子,坦率讲文本比较长的时候不好看出来,这个时候我们就可以用 --color 这个flag 来显示到底这一行的哪个部分 match 了我们提供的 pattern。

执行 grep "this.*data" regtest.txt --color 命令

最后匹配上的部分变成了红色

打印匹配次数

有时候我们不需要真的看到那些匹配的行,而是只需要知道匹配了几次,这时候可以用 -c 这个 flag 来实现。

$ grep –c “string” filename

排除搜索

前面都是我们给出一个 pattern,找能匹配上这个 pattern 的行。但有些时候我们是希望逆着来,找到不匹配这个pattern的行,grep 对此也提供了支持,也就是 -v。

还是用上一节的 testfile3,如果这次我们想找不包含 "account" 字符串的部分,就可以这样:

grep –v “account” testfile3

全单词匹配

$ grep -w "unix" geekfile.txt unix is great os. unix is opensource. unix is free os.

展示行号

这次用 -n 来实现,我们还是基于 employee.txt 搜索 sale。

$ grep -n sale employee.txt

3:varun manager sales 50000
6:Tarun peon sales 15000
7:deepak clerk sales 23000
8:sunil peon sales 13000

递归整个目录

$ grep -iR geeks /home/geeks




posted @ 2023-02-11 14:13  KeepSmiling_me  阅读(30)  评论(0)    收藏  举报