substitui a nth ocorrência de string em cada linha de um arquivo de texto

9

Eu tenho arquivos de texto grandes com strings delimitadas por espaço (2-5). As cadeias podem conter "'" ou "-". Eu gostaria de substituir o segundo espaço com um tubo.

Qual é o melhor caminho a percorrer?

Usando o sed eu estava pensando nisso:

sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /|/' filename.txt

Alguma outra ideia / melhor / mais simples?

    
por dnkb 20.05.2010 / 18:12

2 respostas

12

Você pode adicionar um número no final do comando substituto. Por exemplo, o seguinte substituirá a segunda ocorrência de old pela string new em cada linha de file :

sed 's/old/new/2' file

Então, em vez da sua solução proposta, você pode usar:

sed 's/ /|/2'

Para mais informações, veja por exemplo este tutorial sobre sed .

    
por 20.05.2010 / 18:55
1

Você tentou sua versão? Funcionou? Porque acho que é basicamente uma boa ideia. Eu faria um pouco diferente, embora:

sed -re 's/^([^ ]+ +[^ ]+) /|/'

Isso aceitará todos os caracteres em uma palavra que não seja espaço e aceitará mais de um espaço entre as duas primeiras palavras.

    
por 20.05.2010 / 18:48