Como não tenho certeza se você quer tanto um código perl , aqui está um código awk semelhante:
awk -F';' -v OFS=';' '{ $NF=""; print }' data.csv
= > Este código esvazia o último campo de cada linha ( $NF="" ). Campos de entrada ( -F\; ) e campos de saída ( OFS=';' ) são ditos separados por ";".
O mesmo com sed :
sed 's/[^;]*$//' data.csv
= > Isso substitui ( s/.../.../ ) a sequência mais longa de caracteres que não é ";" ( [^;]* ) no final da linha ( $ ) sem nada.
O mesmo com grep :
grep -o '.*;' data.csv
= > As expressões regulares grep são gananciosas por padrão, o que significa que elas correspondem à sequência mais longa possível. Aqui .*; significa "a sequência mais longa de caracteres que termina com um"; ". A opção -o mostra o que é correspondido em vez da linha inteira.
Finalmente, um perl equivalente seria (graças a @steeldriver):
perl -F';' -lpe '$F[-1]=""; $_ = join ";", @F' data.csv
= > Ele funciona de forma semelhante a awk , sendo a junção explícita aqui.