Shell
如何匹配行首的文本並將前 X 行與匹配的行一起列印?
我在這裡發現了一個類似的問題,但這並不是我想要的。
假設我有一個這樣的文本文件:
[...] 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 [...]
我想匹配以“名稱:羅伯特”開頭的行,並列印前 3 行以及匹配的結果,只得到這些行:
age: 27 country: Canada city: Toronto name: Robert
我怎樣才能在終端中做到這一點?
使用
grep
$ grep -B3 '^name: Robert$' input_file age: 27 country: Canada city: Toronto name: Robert
您已經有了最好的方法,只需使用
grep -B
,但您也可以在“段落模式”中使用 perl。此模式由-00
開關啟用,意味著“行”現在由兩個連續的換行符定義,基本上是一個段落。這使您可以執行以下操作:$ perl -00 -ne 'print if /name: Robert\b/' file age: 27 country: Canada city: Toronto name: Robert $
您也可以
awk
通過將記錄分隔符 (RS
) 設置為空 (''
) 來執行相同的操作:$ awk -v RS='' '/name: Robert$/' file age: 27 country: Canada city: Toronto name: Robert $
awk 還具有不列印 perl 所做的額外換行符的優點。