当它们位于两个不同的行上时,如何使用单个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
的。