Por que o sed substitui todas as ocorrências em vez de apenas a primeira ocorrência? [duplicado]

3

Estou tentando substituir a primeira ocorrência em um arquivo usando sed :

sed -i s/he/He/ dummy.txt

Em vez de substituir a primeira ocorrência, ela substitui todas as ocorrências, mesmo sem /g .

De acordo com a documentação, ele deve substituir apenas o primeiro.

A versão sed que é:

GNU sed version 4.1.5

Estou faltando alguma coisa? Ou o comportamento difere para diferentes implementações sed ?

    
por sathya_dev 19.06.2015 / 11:13

1 resposta

2

sed processa linha de entrada por linha. O modificador /g influencia se ele substitui todas as ocorrências em uma linha ou apenas a primeira:

echo hehe | sed s/h/H/
echo hehe | sed s/h/H/g

Para substituir apenas a primeira ocorrência no arquivo, use algo como o seguinte:

s/h/H/            # Replace.
ta                # Go to a if s/// worked.
b                 # Otherwise, start the next cycle.
:a { n            # Process the next line.
     ba           # Go to a.
}
    
por 19.06.2015 / 11:16

Tags