input:
--------------- 1st block ----------------
info1:AAAAA
random info
random info
random info
info0:"one string"
random info
random info
[...]
info2:"2nd string"
info3:"3rd string"
random info
random info
info4:"4th string"
--------------- 2nd block ----------------
info1:BBBBB
random info
random info
random info
info0:"one string"
random info
random info
[...]
info2:"2nd string"
info3:"3rd string"
random info
random info
info4:"4th string"
--------------- 3rd block ----------------
[...]
note: если info0 - это шаблон, который я ищу, я хочу получить info0, info1, info2, info3, info4
Я могу сделать grep info0 -B 4(чтобы получить info1), но я не могу сделать -A x, чтобы захватить остальные (info2,3,4), потому что количество строк может отличаться от одного блока к другому.
важно:
-the output should be grouped by info0
-info0, info2,info3,info4 is always the same, but info1 is always unique (actually info1 is a MAC address).
-the number of blocks is not limited (there can be 1, 2 , 3, 4,...blocks).
-subsidiary question: within the same command, do the same thing but with info0 carrying different string. For instance: 2 blocks with the same info0, then 3 blocks with another info0 and so on and so forth...
- I put ----- #block----- in the input to facilitate lecture to the reader, but these lines do not exist in the actual input.
желаемый результат:
info0:"one string"
info1:AAAAA
info1:BBBBB
info2:"2nd string"
info3:"3rd string"
info4:"4th string"
что я сделал до сих пор
output | grep info0 -B 4 -A 23 | grep '\(info1\|info0\|info1\|info2\|info3\|info4\)' >> /tmp/info0
23 -> расчетное максимальное числострок одного блока
большое спасибо, ребята!