Acho que sed
pode ser mais adequado, por exemplo com o GNU sed:
parse.sed
/^Package: / { s///; h }
/^Version: |^Description: / { s///; H }
/^$/ { x; s/\n/;/gp }
Explicação:
- Localize as linhas que começam com os prefixos desejados, por ex. %código%
- Remova o prefixo
/^Package/
, ou seja, substitua o padrão correspondido anteriormente por nada - Salve o restante no espaço de espera (
s///
) ou (h
), observe oH
sobrescreve o espaço de espera - Quando uma linha vazia entre pacotes é encontrada (
h
), troca espaço e espaço padrão (/^$/
) e substitua novas linhas pelo delimitador desejado, aqui ponto e vírgula (x
) e imprima o resultado
Execute assim:
apt-cache dumpavail | sed -nEf parse.sed
Com s/\n/;/gp
anexado, a saída é:
0ad;0.0.23-1+b1;Real-time strategy game of ancient warfare
0ad-data;0.0.23-1;Real-time strategy game of ancient warfare (data files)
0ad-data-common;0.0.23-1;Real-time strategy game of ancient warfare (common data files)
0xffff;0.8-1;Open Free Fiasco Firmware Flasher
2048-qt;0.1.6-1+b1;mathematics based puzzle game
2ping;4.2-1;Ping utility to determine directional packet loss
2vcard;0.6-1;perl script to convert an addressbook to VCARD file format
fonts-3270;2.0.0-1;monospaced font based on IBM 3270 terminals
389-admin;1.1.46-2;389 Directory Administration Server
libds-admin-serv0;1.1.46-2;Libraries for the 389 Directory Administration Server