在特定文件类型中使用GREP搜索
Contents
1. 概述
能够扫描文档内容中的特定文本字符串对于任何 Linux 爱好者来说都是一项非常宝贵的技能。更进一步,能够在搜索目录中的所有文件时指定文件类型将有助于缩短搜索时间并帮助更快地识别所需内容。
在本教程中,我们将探索*grep *命令。此命令非常适合在文件中快速搜索特定的文本字符串。
2. 运行一般搜索
我们将使用三个具有 .cc、.h 和 .txt 文件扩展名的测试文件。还有另一个名为Test的文件夹,其中包含相同的三个文件:
$ ls -R
.:
Test
test.cc
test.h
test.txt
./Test:
test.cc
test.h
test.txt
grep 的语法需要遵循grep [OPTIONS…] PATTERNS [FILE…]其中PATTERN是FILE中的文本必须匹配的内容:
$ grep "Hello" *
grep: Test: Is a directory
test.cc:Hello World!
test.h:Hello World!
test.txt:Hello World!
此命令运行不带任何选项的grep,模式为“Hello”,并在本地目录中的每个文件上运行它。
对于匹配 PATTERN的文件,它将输出文件名,后跟包含匹配文本的行。
当 grep命令遇到一个目录时,它将说明目录的名称,后跟“Is a directory”。这可以在上面的 Test目录中看到。
许多其他选项可以与 grep 一起使用。例如,如果我们使用 -i和 -r选项,我们可以指定文本不敏感以及将 grep设置为递归搜索:
$ grep -r -i "hello" *
Test/test.txt:Hello World!
Test/test.h:Hello World!
Test/test.cc:Hello World!
test.cc:Hello World!
test.h:Hello World!
test.txt:Hello World!
3. 指定文件类型
有时我们可能需要将结果限制为我们可能正在使用的特定文件类型。为此,我们可以使用以两个连字符开头的特殊类型的选项:
$ grep -ri "hello" --include=*.cc
Test/test.cc:Hello World!
test.cc:Hello World!
请注意这次的结果是如何大大减少了,即使我们仍在搜索相同的字符串。
我们可以多次运行此命令并更改文件扩展名以在多种文件类型中搜索字符串。但是,我们也可以使用花括号({})在一行中实现相同的目的:
$ grep -ri "hello" --include=*.{cc,h}
Test/test.h:Hello World!
Test/test.cc:Hello World!
test.h:Hello World!
test.cc:Hello World!
我们可以包含任意数量的文件类型,只需用逗号分隔即可。