Substitui a segunda instância da string em uma linha em um arquivo ASCII usando o Bash

5

Eu tenho um arquivo ASCII com a seguinte estrutura:

file1.png otherfile1.png
file2.png otherfile2.png
file3.png otherfile3.png
...

Eu quero substituir .png por .mat , mas apenas pela segunda coluna. O resultado deve ser assim:

file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
...

Como faço isso no Bash?

    
por mcExchange 05.12.2016 / 14:43

2 respostas

13

Bem, se é o fim da linha ...

$ sed 's/\.png$/.mat/' file
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
  • s/old/new/ pesquisar e substituir
  • \. ponto literal (sem o escape corresponde a qualquer caractere)
  • $ fim da linha

Ou para especificar explicitamente a segunda coluna, você pode usar um awk way ...

$ awk 'gsub(".png", ".mat", )' file
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
  • gsub(old, new, where) pesquisar e substituir
  • segunda coluna
por Zanna 05.12.2016 / 14:46
7

Você pode substituir todas as .png strings diretamente no final de uma linha em INPUTFILE da seguinte forma:

sed 's/\.png$/.mat/' INPUTFILE

O comando acima não modificará INPUTFILE , mas somente imprimirá a versão alterada no terminal.

Para editar diretamente o arquivo, adicione o -i flag a sed (ou -i.bak para armazenar um backup do arquivo original):

sed -i 's/\.png$/.mat/' INPUTFILE
    
por Byte Commander 05.12.2016 / 14:48