grep命令的全称是全局正则表达式打印,它是Linux中功能最强大且最常用的命令之一。
grep在一个或多个输入文件中搜索与指定模式匹配的行,并将匹配行写入标准输出。如果未指定文件,grep则从标准输入读取内容。
在本教程中,我们将向您展示如何使用grep
对标准输出进行过滤,排除 。这其中包括排除不匹配的行,排除目录和文件等。
grep 排除空行
GNUgrep
支持三种正则表达式语法,Basic、Extended和Perl-compatible。默认情况下,grep
将模式解释为Basic正则表达式。
要使用grep排除空行很简单,首先我使用^
符号匹配行首,$
符号匹配行尾。将^$
组合起就是空行。
然后仅打印与搜索模式不匹配的行,使用grep
命令的-v
或--invert-match
选项进行反转的匹配。
grep -vE ^$ file
grep 反转匹配
要仅打印与搜索模式不匹配的行,可以使用grep
命令的-v
或--invert-match
选项进行反转的匹配。
注意grep
会区分大小写。这意味着大写和小写被视为不同的字符。要在搜索时忽略大小写,使用-i
选项调用grep
。
如果搜索字符串包含空格,只需要将其括在单引号或双引号中。grep就会搜索空格,你也可以使用正则表达式表示空格的匹配。
例如命令ps aux | grep fnord | grep -v grep
在搜索进程的时候排除自身的进程。
ps aux | grep fnord | grep -v grep
正则表达式基础
GNUgrep
支持三种正则表达式语法,Basic、Extended和Perl-compatible。默认情况下,grep
将模式解释为Basic正则表达式。
当你在正则表达式中使用使用OR运算符|
时,必须使用反斜杠\
进行转义。因为shell会将|
解释Linux管道。
如果你使用的扩展正则表达式,则|
不不需要转义,即不需要反斜杠\
,-E
选项指示grep
命令使用扩展正则表达式。
^
符号匹配行首,$
符号匹配行尾,.
符号以匹配任意单个字符,[ ]
中括号匹配指定范围的字符,[^ ]
以匹配非中括号内的任意字符。
例如命令grep -Ewv 'nologin|bash' /etc/passwd
和grep -wv 'nologin\|bash' /etc/passwd
是等效的,前者使用的是扩展表达式,后者使用基本正则表达式。
grep -Ewv 'nologin|bash' /etc/passwd
grep -wv 'nologin\|bash' /etc/passwd