Substituindo a primeira ocorrência de um padrão em uma linha, por todas as linhas em um arquivo com sed

10

É possível fazer isso em um forro?

Eu tenho uma saída como esta:

"First line" - Description  
" Second line" - Description  
"Third line" - Description  
" Fourth line" - Description  

Esta entrada é gerada automaticamente.

Desejo substituir a primeira ocorrência de " (aspas + espaço) por " (aspas) para cada linha. Se eu aplicar a substituição globalmente, ela também mudará todas as ocorrências de line" - para line"- , então eu queria saber se é possível usar um liner sed para fazer isso.

Eu tentei usar ^ como este

sed -r ':a;N;$!ba;s/(\^\" )/\"/g'

Mas não está funcionando, não substitui nada. Eu tentei

sed -r ':a;N;$!ba;s/(^|\" )/\"/g'

e substitui todas as ocorrências. Acabei de começar a usar sed, então não sei se estou fazendo algo errado.

O que estou perdendo aqui?

    
por Steve B. 09.04.2012 / 05:21

1 resposta

21

Você está pensando demais nisso. sed substitui apenas a primeira instância em uma linha por padrão (sem o modificador /g ), embora você ainda queira ancorar porque você não quer tanto a primeira instância na linha como a que está no início da linha. linha; e você normalmente não precisa das ações de linha explícitas que está tentando usar (por quê?).

sed 's/^" /"/'
    
por 09.04.2012 / 05:25