Supongamos que tengo un archivo con líneas

aaa=bbb

Ahora me gustaría reemplazar con:

aaa=xxx

Puedo hacerlo de la siguiente manera:

sed "s/aaa=bbb/aaa=xxx/g"

Ahora tengo un archivo con un par de líneas de la siguiente manera:

aaa=bbb 
aaa=ccc 
aaa=ddd 
aaa=[algo]

Cómo se puede reemplazar todos esta líneas aaa=[something] con aaa=xxx utilizando sed?

  • Es [something else] el texto literal, o es que sólo un marcador de posición? ¿Cuál es el posible formato de la cosa después del signo igual?
  • que es más de un regex pregunta no una sed pregunta.
InformationsquelleAutor Michael | 2012-01-11

6 Comentarios

  1. 161

    Intente esto:

    sed "s/aaa=.*/aaa=xxx/g"
    • ¿cuál es la g para?
    • La fuerza de la costumbre, que se puede ignorar que en este caso se utiliza como una sustitución global de la línea para reemplazar cada partido en lugar de sólo la primera. En este caso, aunque sólo la primera será igualado debido a la .*.
    • Michael J. Barber, g reemplazar todas las instancias de regexp con reemplazo
  2. 88

    También puede utilizar sed de la línea de cambio para lograr esto:

    sed -i "/aaa=/c\aaa=xxx" your_file_here

    Esto va a ir a través y encontrar las líneas que pasan a la aaa= de la prueba, lo que significa que la línea que contiene las letras aaa=. A continuación, se sustituye la totalidad de la línea con aaa=xxx. Usted puede agregar un ^ al comienzo de la prueba para asegurarse de que usted consigue solamente las líneas que comienzan con aaa= pero eso depende de ti.

    • OS X sed requiere c a ser seguido de una barra invertida y un salto de línea, y no añadir una nueva línea a la inserción de texto, pero se puede utilizar por ejemplo $'/aaa=/c\\\naaa=xxx\n'.
    • OSX utiliza BSD sed
    • He aquí un ejemplo en la sed de la documentación de la cambiar/reemplazar la característica que @Sr. T está hablando.
    • Esta es la más cercana a la realidad, haciendo lo que se les pide… (Pero Lri la versión es necesaria para la portabilidad)
  3. 40

    Como este:

    sed 's/aaa=.*/aaa=xxx/'

    Si quieres garantizar que la aaa= es en el comienzo de la línea, hacer:

    sed 's/^aaa=.*/aaa=xxx/'
    • Lo que si quiero reemplazar con aaa=’xxxx’. Traté de escapar como sed 's/aaa=.*/aaa=\'xxx\'/' pero que abre un > símbolo del sistema en una nueva línea de…
  4. 2

    Si quieres usar awk, a continuación, este trabajo sería demasiado

    awk -F= '{$2="xxx";print}' OFS="\=" filename
  5. 1

    Esto podría funcionar para usted:

    cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/xxx/'
    > aaa=bbb
    > aaa=ccc
    > aaa=ddd
    > aaa=[something else]
    !
    aaa=bbb
    aaa=ccc
    aaa=ddd
    aaa=xxx
    • No creo que un explícito de verificación para bbb, ccc, y ddd es bastante lo que el OP tenía en mente.

Dejar respuesta

Please enter your comment!
Please enter your name here