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.