pha*_*aft 2 shell text-processing text
我在这里发现了类似的问题,但这并不完全是我想要的。
假设我有一个像这样的文本文件:
[...]
age: 10
country: United States
city: New York
name: John
age: 27
country: Canada
city: Toronto
name: Robert
age: 32
country: Mexico
city: Guadalajara
name: Pedro
[...]
Run Code Online (Sandbox Code Playgroud)
我想匹配以“name: Robert”开头的行,并打印前 3 行以及匹配的结果,只得到这些行:
age: 27
country: Canada
city: Toronto
name: Robert
Run Code Online (Sandbox Code Playgroud)
我如何在终端中执行此操作?
sse*_*taH 11
使用grep
$ grep -B3 '^name: Robert$' input_file
age: 27
country: Canada
city: Toronto
name: Robert
Run Code Online (Sandbox Code Playgroud)
您已经有了最好的方法,只需使用grep -B
,但您也可以在“段落模式”下使用 perl 。此模式由开关启用-00
,意味着“行”现在由两个连续的换行符定义,基本上是一个段落。这可以让您执行以下操作:
$ perl -00 -ne 'print if /name: Robert\b/' file
age: 27
country: Canada
city: Toronto
name: Robert
$
Run Code Online (Sandbox Code Playgroud)
awk
您还可以通过将记录分隔符 ( RS
) 设置为空 ( ''
)来执行相同的操作:
$ awk -v RS='' '/name: Robert$/' file
age: 27
country: Canada
city: Toronto
name: Robert
$
Run Code Online (Sandbox Code Playgroud)
awk 的另一个优点是不会像 perl 那样打印额外的换行符。
归档时间: |
|
查看次数: |
807 次 |
最近记录: |