Ok, para atender aos requisitos que você esclareceu nos comentários abaixo da sua pergunta, eu dividiria as coisas em duas partes:
- exclui todas as linhas que leem
at_
logo antes do número final
- das linhas restantes, remova o sublinhado no final e coloque o número entre colchetes angulares precedido por uma barra invertida.
Solução para a parte 1:
Isso é feito com mais facilidade escrevendo-se uma expressão regular que corresponda exatamente ao que não deseja e, em seguida, informando ao comando de chamada a saída apenas das linhas que não partida. Isso é mais facilmente feito com grep
, então vamos usá-lo:
egrep -v "at_[0-9]+" sst_piso_top_c0.spf_typ_C
A opção -v
ou --invert-match
informa grep
para imprimir somente linhas não correspondentes.
Solução para a parte 2:
Isso é mais facilmente feito com sed
s (ubstitute) -command:
sed -r 's/_([0-9]+)$/\<\>/g'
a expressão regular corresponde a sublinhado e um número no final da linha. Ao colocar a parte numérica entre parênteses (...)
, podemos colá-la com
na seção de substituição. As seções de substituição completas consistem de colchetes angulares invertidos, incluindo nossa referência de referência \<\>
. A barra invertida precisa ser escapada com outra barra invertida \
, porque é tratada como um caractere de escape especial.
Juntando tudo:
Se canalizarmos a saída do comando egrep
em 1. para o nosso comando sed
de 2., os comandos sed
usarão como fluxo de entrada:
egrep -v "at_[0-9]+" sst_piso_top_c0.spf_typ_C | sed -r 's/_([0-9]+)$/\<\>/g' > sst_piso_top_c0.spf_typ_C.new
Normalmente, os resultados de sed
seriam enviados para a saída padrão, portanto, a linha acima os redireciona para um arquivo ( > newfile
). Note que este nome de arquivo tem que ser diferente do que o egrep
está lendo, senão sobrescreveríamos o mesmo arquivo que estamos lendo e acabamos com um arquivo vazio.