在Linux和Unix系统中,Grep是全局正则表达式打印
的缩写,是一个用于搜索和匹配正则表达式中包含的文本文件的命令。此外,该命令预装在每个Linux发行版中。在本指南中,我们将通过一些示例来了解通用grep命令的用法。
Linux中的grep命令
Grep命令可用于查找或搜索文本文件中的正则表达式或字符串。为了演示这一点,让我们创建一个文本文件 welcome.txt 并添加一些内容,如图所示。
1Welcome to Linux !
2Linux is a free and opensource Operating system that is mostly used by
3developers and in production servers for hosting crucial components such as web
4and database servers. Linux has also made a name for itself in PCs.
5Beginners looking to experiment with Linux can get started with friendlier linux
6distributions such as Ubuntu, Mint, Fedora and Elementary OS.
太棒了!现在,我们准备执行几个grep命令并操作输出以获得所需的结果。要在文件中搜索字符串,请运行以下命令语法
1$ grep "string" file name
或
1$ filename grep "string"
示例 :
1$ grep "Linux" welcome.txt
OUTPUT 如您所见,grep不仅搜索并匹配字符串
linux
,还打印出出现该字符串的行。如果文件位于不同的文件路径中,请确保指定如下所示的文件路径
1$ grep "string" /path/to/file
使用--color选项着色Grep结果
如果你使用的系统不会用与文本其他部分不同的颜色显示搜索字符串或模式,那么使用--color
可以让你的结果脱颖而出。例如
1$ grep --color "free and opensource" welcome.txt
输出
递归查找所有目录中的字符串
如果您希望在当前目录和所有其他子目录中搜索字符串,请使用-r
标志进行搜索,如下所示
1$ grep -r "string-name" *
例如
1$ grep -r "linux" *
输出
忽略区分大小写
在上面的例子中,我们的搜索结果给了我们想要的结果,因为字符串linux
是以大写形式指定的,并且也以大写形式存在于文件中。现在,让我们尝试搜索小写的字符串。
1$ grep "linux" file name
输出中没有发现,对吧?这是因为greping无法找到并匹配字符串linux
,因为第一个字母是小写的。要忽略区分大小写,请使用-i
标志并执行以下命令
1$ grep -i "linux" welcome.txt
OUTPUT Awese不是吗?**
-i
通常用来显示字符串,不区分大小写。**
统计字符串与-c选项匹配的行数
要计算字符串模式出现或驻留的总行数,请执行以下命令
1$ grep -c "Linux" welcome.txt
输出
使用Grep反转输出
要反转grep输出,请使用-v
标志。-v
选项指示grep打印不包含或不匹配该表达式的所有行。V选项告诉grep反转其输出,这意味着不打印匹配的行,相反地打印与表达式不匹配的所有行。返回到我们的文件,让我们显示如下所示的行号。在Vim编辑器上按Esc键,然后键入一个冒号
1set nu
接下来,按EnterOUTPUT Now,显示不包含字符串
linux
Run的行
1$ grep -v "Linux" welcome.txt
OUTPUT 如您所见,grep显示了不包含搜索模式的行。
使用-n选项对包含搜索模式的行进行编号
要对字符串模式匹配的行进行编号,请使用-n
选项,如下所示
1$ grep -n "Linux" welcome.txt
输出
使用-w选项搜索完全匹配的单词
然后传递-w
标志将搜索包含完全匹配的单词的行,如下所示
1$ grep -w "opensource" welcome.txt
输出 ,如果您尝试
1$ grep -w "open" welcome.txt
不会返回任何结果,因为我们搜索的不是模式,而是确切的单词!
在grep中使用管道
grep命令可以与管道一起使用,以获得不同的输出。例如,如果你想知道某个包是否安装在Ubuntu系统中,
1$ dpkg -L | grep "package-name"
例如,要了解您的系统中是否安装了OpenSSH,可以通过管道将dpkg-l
命令传递给grep,如下所示
1$ dpkg -L | grep -i "openssh"
输出
使用管道显示搜索模式前后的行数
您可以使用**-A** 或** -B** 来显示搜索字符串之前或之后的行数。** -A** 标志表示搜索字符串之后的行,而** -B** 打印出现在搜索字符串之前的输出。例如
1$ ifconfig | grep -A 4 ens3
此命令在ifconfig
命令中的_ens_string之后显示包含该字符串的行和4行文本。OUTPUT 相反,在下面的示例中,使用-B标志将显示包含搜索字符串的行,并在
ifconfig
命令中的_ETHING_STRING之前显示3行文本。** 输出**
1$ ifconfig | grep -B 4 ether
将grep与正则表达式配合使用(REGEX)
术语REGEX是REG ular** Expression** 的首字母缩写。REGEX是用于匹配模式的字符序列。以下是几个例子:
1^ Matches characters at the beginning of a line
2$ Matches characters at the end of a line
3"." Matches any character
4[a-z] Matches any characters between A and Z
5[^ ..] Matches anything apart from what is contained in the brackets
示例 要打印以某个字符开头的行,语法为;
1grep ^character file_name
例如,要在我们的欢迎.txt文件中显示以字母d
开头的行,我们将执行
1$ grep ^d welcome.txt
OUTPUT 以显示以字母‘x’结尾的行
1$ grep x$ welcome.txt
输出 的grep正则表达式结束
获取更多grep选项的帮助
如果您需要了解有关grep命令用法的更多信息,请运行下面的命令,以获得可能与该命令一起使用的其他标志或选项的预览。
1$ grep --help
示例输出 感谢您抽出时间来阅读本教程。请随时尝试这些命令,并让我们知道它的进展情况。