Com awk:
awk 'NF{NF-=1};1' <in >out
ou:
awk 'NF{NF--};1' <in >out
ou:
awk 'NF{--NF};1' <in >out
Embora isso pareça vodu, ele funciona. Existem três partes para cada um desses comandos do awk.
O primeiro é NF, que é uma pré-condição para a segunda parte. NFé uma variável que contém o número de campos em uma linha. No AWK, as coisas são verdadeiras se não forem 0 ou string vazia "". Portanto, a segunda parte (onde NFé decrementada) só acontece se NFnão for 0.
A segunda parte ( NF-=1 NF--ou --NF) está apenas subtraindo uma da NFvariável. Isso impede que o último campo seja impresso, porque quando você altera um campo (removendo o último campo neste caso), awkrecria $0, concatena todos os campos separados por espaço por padrão. $0não continha mais o último campo.
A parte final é 1. Não é mágico, é apenas usado como uma expressão que significa true. Se uma awkexpressão for avaliada como verdadeira sem nenhuma ação associada, a awkação padrão será print $0.