Linux中的15个实用Grep命令示例

grep作为Linux上强大的文本搜索命令,对于每一个要掌握Linux的开发者来说,必须要能够很熟练的使用。grep不仅支持普通模式查找,还支持高级的正则匹配。本文将会列举15个grep命令的用法,快速了解grep的使用。

首先创建以下demo_file,将在下面的示例中使用它来演示grep命令。

$ cat demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file

在单个文件中搜索给定的字符串

grep命令的基本用法是在指定文件中搜索特定字符串,如下所示。

$ grep "this" demo_file

检查多个文件中的给定字符串

$ cp demo_file demo_file1
$ grep "this" demo_*

使用grep -i不区分大小写的搜索

$ grep -i "string" FILE

正则表达式查找

grep "lines.*empty" demo_file

如果可以有效地使用正则表达式,这是一项非常强大的功能。在上面的示例中,它将搜索所有以“行”开头,以“空”结尾且中间包含任何空格的模式。即在demo_file中搜索“空行之间的行”。

从grep的文档中:一个正则表达式后可以跟几个重复运算符之一:

  • ?上一项是可选的,最多匹配一次。
  • *前一项将被匹配零次或多次。
  • +前一项将被匹配一次或多次。
  • {n}前一项恰好匹配n次。
  • {n,}前一项匹配n次或多次。
  • {,m}前一项最多匹配m次。
  • {n,m}前一项至少匹配n次,但不超过m次。

使用grep -w检查完整单词,而不是子字符串

如果要搜索单词,并避免与子字符串匹配,请使用-w选项。仅执行常规搜索将显示所有行。

以下示例是常规grep搜索“ is”的地方。当您搜索“ is”时,将不显示任何“ is”,“ his”,“ this”以及所有带有“ is”子字符串的内容。

$ grep -i "is" demo_file

以下示例是WORD grep,它仅在其中搜索单词“ is”。请注意,即使“ This”中存在“ is”,该输出也不包含“ This line has the first first character of the单词大写”这一行,因为以下仅查找单词“ is” ”,而不是“ this”。

$ grep -iw "is" demo_file

使用grep -A,-B和-C在匹配之前/之后/周围显示行

在大型文件上执行grep时,查看匹配后的某些行可能会很有用。如果grep不仅可以向您显示匹配的行,还可以向您显示匹配后/之前/周围的行,您可能会感到方便。

显示匹配内容之后的N行

$ grep -A 3 -i "example" demo_text
Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.

显示匹配内容之前的N行

$ grep -B 2 "single WORD" demo_text
Example to show the difference between WORD and word

* 192.168.1.1 - single WORD

显示匹配内容前后的N行

$ grep -C 2 "Example" demo_text
word - word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word

* 192.168.1.1 - single WORD

$ grep -C 2“示例” demo_text 单词-单词由字母,数字和下划线组成。
示例显示WORD和Word的区别
* 192.168.1.1-单字

使用GREP_OPTIONS突出显示搜索

$ export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8'

$ grep this demo_file
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.

使用grep -r递归搜索所有文件

当您要搜索当前目录及其子目录下的所有文件时。-r选项是您需要使用的选项。以下示例将在当前目录及其所有子目录中的所有文件中查找字符串“ ramesh”。

$ grep -r "ramesh" *

使用grep -v反转匹配

您有不同的选项来显示匹配的行,显示匹配之前的行,显示匹配之后的行以及突出显示匹配。所以绝对您也希望选项-v进行反向匹配。

如果要显示与给定的字符串/模式不匹配的行,请使用-v选项,如下所示。本示例将显示所有与单词“ go”不匹配的行。

$ grep -v "go" demo_text

显示与所有给定模式都不匹配的行。

$ grep -v -e "a" -e "b" -e "c" test-file.txt

使用grep -c计算匹配数

$ grep -c "go" demo_text
6

使用grep -l仅显示与给定模式匹配的文件名

如果希望grep仅显示与给定模式匹配的文件名,请使用-l(小写L)选项。

$ grep -l this demo_*
demo_file
demo_file1

仅显示匹配的字符串

默认情况下,grep将显示与给定模式/字符串匹配的行,但是如果您希望grep仅显示模式的匹配字符串,请使用-o选项。

$ grep -o "is.*line" demo_file
is line is the 1st lower case line
is line
is is the last line

在行中显示比赛的位置

当您希望grep显示与文件中的模式匹配的位置时,请使用以下选项作为

$ grep -o -b "3" temp-file.txt
2:3

使用grep -n显示输出时显示行号

显示与行匹配的文件的行号。它为每个文件执行基于1的行编号。使用-n选项可利用此功能。

$ grep -n "go" demo_text
5: * e - go to the end of the current word.
6: * E - go to the end of the current WOR
Elasticsearch中Painless编程
systemctl命令详解