Inserir novas linhas com sed?

0

Eu tenho um monte de arquivos de texto em um diretório, onde a seguinte palavra ocorre:

GSM89103AATF

Na verdade, o número pode mudar, então outro exemplo poderia ser GSM89089AATF . Eu preciso substituir essas ocorrências com GSM89089\nAATF , ou seja, inserir uma nova linha. Posso fazer isso com sed ?

    
por becko 27.08.2017 / 13:33

1 resposta

2

Você pode usar o GNU sed :

 $ sed -r 's/(GSM[0-9]{5})(AATF)/\n/' file.in >file.out

O padrão corresponde à primeira parte e depois à segunda parte em dois grupos de captura separados. Eu assumi que a primeira parte sempre será GSM seguida de cinco dígitos. A substituição simplesmente cola os dados capturados dos dois grupos com uma nova linha intermediária.

O -r é necessário porque usei uma expressão regular estendida. Algumas implementações de sed use -E em vez de -r para esses tipos de expressões regulares.

Em sistemas sem GNU sed :

$ sed -r 's/(GSM[0-9]{5})(AATF)/\
> ' file.in >file.out

Ou seja, basta adicionar um \ e pressionar o retorno após e continuar o padrão de substituição na próxima linha. > é um prompt, não é algo que você digita.

    
por 27.08.2017 / 13:42