我需要选择非空行且不以 开头的行//
。我可以执行两个单独的 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