2010-06-02 2 views
5

come detto titolo, sto provando a cambiare solo la prima occorrenza di parola. Usando il file sed/this/that/'. txtsed 's/this/that /' - ignorando g ma continua a sostituire l'intero file

sebbene non utilizzi l'opzione g, sostituisce l'intero file. Come risolvere questo problema?

UPDATE:

$ cat file.txt 
    first line 
    this 
    this 
    this 
    this 
$ sed -e '1s/this/that/;t' file.txt 
    first line 
    this // ------> I want to change only this "this" to "that" :) 
    this 
    this 
    this 
+0

Non stai utilizzando l'esempio sed piena dato nella mia risposta. L'ho provato e funziona per me. – zaf

risposta

6

http://www.faqs.org/faqs/editor-faq/sed/

4,3. Come cambio solo la prima occorrenza di un pattern?

sed -e '1s/LHS/RHS/;t' -e '1,/LHS/s//RHS/' 

Dove LHS = questo e RHS = che per il vostro esempio.

Se si conosce il modello non si verificherà sulla prima riga, omettere il primo -e e l'istruzione che segue esso.

+0

si prega di controllare il mio esempio sopra. –

+0

Non stai utilizzando l'esempio completo di sed che ho provato e funziona per me. – zaf

+0

grazie utilizzando -e funziona - sed -e '1s/LHS/RHS /; t' -e '1,/LHS/s // RHS /' –

1

sed da solo applica la modifica attraverso il file e combinata con il flag "g" la modifica viene applicata a tutte le occorrenze sulla stessa riga.

ad es.

$ cat file.txt 

    first line 
    this this 
    this 
    this 
    this 

$ sed 's/this/that/' file.txt 
    first line 
    that this 
    that 
    that 
    that 

$ sed 's/presente/che/g' file.txt

first line 
    that that <-- Both occurrences of "this" have changed 
    that 
    that 
    that