如何结合这两个 grep 语句

如何结合这两个 grep 语句

我需要选择非空行且不以 开头的行//。我可以执行两个单独的 grep 命令,如下所示:

要提取非空行的行:

grep -v -E '^$' test.txt 

要提取不以 开头的行//

grep -v '//' test.txt 

如何将这两个命令合并为一个?

答案1

尝试这个,

 grep -ve '^$' -e '^//' file

来自男人:

-e 模式,--regexp=模式

Use PATTERN as the pattern.  This can be used to specify multiple search patterns,

或使用扩展正则表达式(-E):

 grep -v -E '^($|//)' file

来自男人:

两个正则表达式可以通过中缀运算符 | 连接;生成的正则表达式与任何与任一备用表达式匹配的字符串相匹配。

答案2

该语句已合并(稍后会解释错误):

grep -v -E '^$' | grep -v '//' test.txt

只有从左边算起的第一部分(直到|)不包括空行。第一个错误是最右边的语句提供了test.txt,它应该已经被提供给最左边的语句,以便两个命令都对此输入进行操作。我的意思是:

grep -v -E '^$' test.txt | grep -v '//'

第二个错误是'//'定义实际上应该是'^//',其中^表示行的开头。全部一起:

grep -v -E '^$' test.txt | grep -v '^//'

这种使用链grep是一种常见的做法。有关如何将它们合并到一个grep进程中的信息,请参阅其他答案。

答案3

因此,您需要以以下字符开头的行//

grep -E '^([^/]|.[^/])' file

相关内容