当它们位于两个不同的行上时,如何使用单个grep命令搜索两个不同的短语?
例如
第1行:这很不错。
第2行:柠檬。
我用这个但是没有结果
grep "sweet.*lemon" file_type
当它们位于两个不同的行上时,如何使用单个grep命令搜索两个不同的短语?
例如
第1行:这很不错。
第2行:柠檬。
我用这个但是没有结果
grep "sweet.*lemon" file_type
Answers:
要grep用于两条不同的线,请搜索两种模式
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
或使用交替
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
要获得模式之后的下一行,可以使用context选项
$ grep -A1 sweet file_type
This is a sweet
lemon.
但如果你是一个多模式,明确地寻找这是棘手,因为grep认为在行......。您.*将抓住线路上 “甜”和“柠檬”之间的所有东西。我们可以-P使用\n匹配换行符,并告诉grep文件为空,用下划线来获取下一行的“柠檬” -z:
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
-E使用扩展的正则表达式(在|无需转义的情况下使用字符进行替换)-An 在模式之后打印其他行,其中n是要打印的尾随行数-P使用Perl样式的正则表达式(grep安装时pcregrep改为“ experimental”,以便更好地支持perl regex)-z使用空字符作为分隔符(在这种情况下只是假装,但grep我们会相信)-o 只打印匹配的部分-o...编辑...
                    grep: The -P and -z options cannot be combined-例如RHEL上的grep(GNU grep)2.5.1
                    
grep -zP命令在这种特定情况下(由两行组成的文件)可以工作,但通常会将任何由换行符分隔的普通文件视为单行,因此可以转储整个文件的内容(如果某处有匹配项)或者什么都没有; 通常那不是人们用grep的。