He estado buscando en línea para esta respuesta y no puede encontrarla.

Tengo un archivo de configuración que contiene:

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6

Y quiero cambiar VAR5 del valor de VALUE5 a VALUE10. Por desgracia, no sé el valor de VALUE5 así que no puedo buscarlo. Así que, básicamente, necesito usar sed (o lo que sea) para reemplazar el valor de VAR5 para cualquier valor que quiero reemplazar con.

  • Donde está «VALUE10» viene? Es que viniendo de otra línea en este mismo archivo? O es algún valor arbitrario?
  • VAR5 en mi archivo de configuración es USER_INSTALL_DIR y VALUE10 es cualquier cosa, podría ser basura. Quiero hacer VAR5 o en mi caso USER_INSTALL_DIR conjunto a una variable que pase a través de un script de bash. El siguiente trabajó para mí gracias a anubhava del comentario. Yo también reemplazó a las diagonales con comas ya que el parámetro que mi script de bash toma contendrá barras, ya que el fallecimiento de un directorio de usuario.

5 Comentarios

  1. 43

    Puedes probar con esta sed:

    sed -i.bak 's/^\(VAR5=\).*/VALUE10/' file

    Da:

    VAR1=VALUE1
    VAR2=VALUE2
    VAR3=VALUE3
    VAR4=VALUE4
    VAR5=VALUE10
    VAR6=VALUE6
    • +1. Sólo quiero darle otra, un poco más sencillo (pero menos potente, funciona sólo si sabemos exactamente el principio) : sed -i.bak 's/^VAR5=.*/VAR5=VALUE10/' file
    • El problema con ambas respuestas es que se requiere de usted para saber el valor de VAR5. En mi caso, no conoce el valor de VAR5 por lo que desea encontrar «VAR5=» y encontrar la cadena entre eso y la nueva línea.
    • Valor de VAR5 fue VALUE5 en su ejemplo, y esta respuesta no necesita saber VALUE5
    • Si usted lee la respuesta de nuevo es en realidad encontrar VAR5= y el valor después de eso. Este es reemplazado por VAR5= y un nuevo valor.
    • Oh woops mi error. Yo lo leí demasiado rápido. Lo siento por eso. Gracias por la corrección de mí.
    • es allí una manera de reemplazar el valor de una variable?
    • he probado esta sed-i.bak ‘s/^(la.nombre.de.mi.propiedad=).*/\»»$cifrado»»/’ miarchivo.propiedades pero no funciona
    • sed -i.bak "s/^the\.name\.of\.my\.property=.*/$encrypted/" myFile.properties

  2. 4

    Aunque la respuesta ha sido añadido a la pregunta. Pasé algún tiempo sobre cómo funciona, me gustaría añadir algunos datos y mi versión de la respuesta,

    sed -i 's,^\(THISISMYVARIABLE[ ]*=\).*,'THISISMYVALUE',g' config.cfg

    Explicación:

    • Como un básico de sed 's/find_this/replace_with/', estamos diciendo: sed para buscar y reemplazar. También recordar que hay varios otros delimitadores que podemos utilizar en lugar de /. Aquí , se utiliza.
    • Aquí nos encontramos con la línea que coincide con ^\(THISISMYVARIABLE[ ]*=\).* . Esto significa que la agrupación del partido THISISMYVARIABLE[ ]*= . ([ ]* para cubrir si hay espacios después de la clave)
    • En reemplazar la sección \1 es una referencia. Estamos referencia el primer grupo en la expresión regular que se utiliza para el partido.
    • THISISMYVALUE es sin las comillas, de acuerdo a la op. ¿Por qué los espacios antes de igualdad, parece voltea de más! El resto es válido, de vuelta de referencia es el nombre correcto..
    • gracias! Yo era tan noob cuando me uní ASÍ que pensé que era una buena idea poner la respuesta en la pregunta, y así me lo quitaron.
  3. 3

    Puede decir:

    sed '/^VAR5=/s/=.*/=VALUE10/' filename

    Que hacer, en cambio en el archivo de en el lugar, el uso de la -i opción:

    sed -i '/^VAR5=/s/=.*/=VALUE10/' filename
  4. 1
    sed '/\(^VAR5=\).*/s//VALUE10/' YourFile

    Bajo AIX/KSH

    $ cat sample.txt
    VAR1=VALUE1
    VAR2=VALUE2
    VAR3=VALUE3
    VAR4=VALUE4
    VAR5=VALUE5
    VAR6=VALUE6
    
    $ sed '/\(^VAR5=\).*/s//VALUE10/' sample.txt
    VAR1=VALUE1
    VAR2=VALUE2
    VAR3=VALUE3
    VAR4=VALUE4
    VAR5=VALUE10
    VAR6=VALUE6

    y para el reemplazo en el archivo de

    cat <> YourFile | sed '/\(^VAR5=\).*/s//VALUE10/'
    
    $ cat <> sample.txt | sed '/\(^VAR5=\).*/s//VALUE10/'
    $ cat sample.txt
    VAR1=VALUE1
    VAR2=VALUE2
    VAR3=VALUE3
    VAR4=VALUE4
    VAR5=VALUE10
    VAR6=VALUE6

    A ser POSIX (en sed parte, no cat) compatible (sed --posix en gnu sed y de forma nativa tradicional sed no sistema linux)

    • No hay nada POSIX sobre un inútil el uso de cat. También que el diamante <> parece completamente fuera de lugar.

Dejar respuesta

Please enter your comment!
Please enter your name here