Para substituir vírgulas por ponto e vírgula nas últimas n linhas com ed
:
n=3
ed -s input <<< '$-'$((n-1))$',$s/,/;/g\nwq'
Dividindo isso:
-
ed -s
= executado silenciosamente (não relate os bytes escritos no final) -
'$-'
= do final do arquivo ($
) menos ... -
$((n-1))
= n-1 linhas ... - (
$' ... '
= cite o resto do comando para protegê-lo do shell) -
,$s/,/;/g
= ... até o final do arquivo (,$
), pesquise e substitua todas as vírgulas por ponto e vírgula. -
\nwq
= finaliza o comando anterior, depois salva e sai
Para substituir vírgulas por ponto e vírgula nas últimas n linhas com sed
:
n=3
sed -i "$(( $(wc -l < input) - n + 1)),\$s/,/;/g" input
Quebrando isso:
-
-i
= edite o arquivo "no local" -
$(( ... ))
= faz um pouco de matemática: -
$( wc -l < input)
= obter o número de linhas no arquivo -
-n + 1
= voltar para trás n-1 linhas -
,\$
= de n-1 linhas até o final do arquivo: -
s/,/;/g
= substitua as vírgulas por ponto e vírgula.