Como adicionar uma string a um arquivo .txt em todas as linhas, excluindo alguns caracteres usando sed ou awk

8

Eu tenho um arquivo de texto chamado xid.txt :

xid: SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: SC32173 id: artf398402
xid: SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556

Eu preciso adicionar uma string 'PT_' antes de 'SC48028', 'SC32173' ... e assim por diante. A string 'SC ...' pode começar com qualquer combinação pode ser 'AC ...' ou 'DL ..'

Resultado exigido:

xid: PT_SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: PT_SC32173 id: artf398402
xid: PT_SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556

Se você vir a saída acima, não devemos inserir 'PT_' antes das sequências que começam com 'i', 'p', 'w' & 'numérico'. Eu tentei alguns comandos básicos para minha exigência usando insert / append em sed.

    
por Subrat Sahoo 23.06.2017 / 10:37

2 respostas

13

Com awk :

awk '$2~/^[A-Z][A-Z]/{ $2="PT_"$2 }1' xid.txt

A saída:

xid: PT_SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: PT_SC32173 id: artf398402
xid: PT_SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556
  • $2~/^[A-Z][A-Z]/ - se o 2º campo começar com 2 letras maiúsculas

Ou sed abordagem:

sed -i 's/^\(xid:[[:space:]]*\)\([A-Z]\{2\}[^[:space:]]*\)/PT_/' xid.txt
    
por 23.06.2017 / 10:42
6

opção sed

sed -i -e 's/[A-Z][A-Z]/PT_&/' file

onde

  • -i editar no lugar
  • Comando -e para executar
por 23.06.2017 / 10:49