2010-06-02 15 views
5

como el título dice, Im tratando de cambiar solo la primera aparición de palabra.Al usar sed/this/that/'file. txtsed '/ this/that /' - ignorando g pero todavía reemplaza todo el archivo

aunque no estoy usando la opción g, reemplaza todo el archivo. Cómo arreglar esto.?

ACTUALIZACIÓN:

$ 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

no se está usando el ejemplo de sed completa dada en mi respuesta. Lo he probado y funciona para mí. – zaf

Respuesta

6

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

4,3. ¿Cómo cambio solo la primera aparición de un patrón?

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

Donde LHS = this y RHS = eso para su ejemplo.

Si conoce el patrón de no se producirá en la primera línea, omitir la primera -e y la declaración que le sigue.

+0

por favor revisa mi ejemplo anterior. –

+0

No está usando el ejemplo completo de sed, lo he probado y funciona para mí. – zaf

+0

gracias usando -e works - sed -e '1s/LHS/RHS /; t' -e '1,/LHS/s // RHS /' –

1

sed por sí mismo aplica la edición a través del archivo y combinado con la bandera "g" la edición se aplica a todas las ocurrencias en la misma línea.

p. Ej.

$ 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/esto/aquello/g' archivo.txt

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