Com o GNU sed
:
$ sed '1~2s/;.*//' file
O intervalo de endereços 1~2
corresponderá à linha 1 e depois a todas as segundas linhas depois disso.
O caso geral é first~step
e o exemplo no manual é sed -n 1~2p
, que imprimirá todas as linhas ímpares.
Esta é uma extensão do GNU.
O equivalente em awk
:
$ awk 'NR % 2 { sub(";.*", "") } { print }' file
Ou, como sugerido por Arrow nos comentários:
$ awk -F';' 'NR % 2 { $0 = $1 } { print }' file
que tem o mesmo efeito, mas em vez de substituir explicitamente tudo após o primeiro ;
, usa ;
como o separador de campo (com -F';'
) e, em seguida, gera apenas o primeiro campo (substituindo toda a entrada linha com apenas o primeiro campo para linhas ímpares).