Vij*_*rty 19 command-line grep
当两个不同的短语位于两个不同的行上时,如何使用单个grep命令搜索它们?
例如
第 1 行:这是一个甜点。
第2行:柠檬。
我用过这个但没有结果
grep "sweet.*lemon" file_type
Run Code Online (Sandbox Code Playgroud)
Zan*_*nna 25
要grep用于两条不同的行,请搜索两种模式
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
Run Code Online (Sandbox Code Playgroud)
或者使用交替
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
Run Code Online (Sandbox Code Playgroud)
要在模式后获取下一行,您可以使用上下文选项
$ grep -A1 sweet file_type
This is a sweet
lemon.
Run Code Online (Sandbox Code Playgroud)
但如果你是一个多模式,明确地寻找这是棘手,因为grep认为在行......。你.*会捕捉到“甜”和“柠檬”之间的一切就行了。我们可以在下一行使用-Pusing\n匹配换行符并通过告诉grep文件为空分隔来获得“lemon” -z:
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
Run Code Online (Sandbox Code Playgroud)
-E使用扩展正则表达式(使用|字符进行交替而不需要转义它)-An 在模式后打印额外的行,其中 n 是要打印的尾随行数-P使用 perl 风格的正则表达式(“实验性” grep- 安装pcregrep而不是更好的 perl 正则表达式支持)-z使用空字符作为分隔符(在这种情况下只是假装,但grep会相信我们的话)-o 只打印匹配的部分像这样:
grep "sweet\|lemon"
Run Code Online (Sandbox Code Playgroud)