Localice la posición y luego realice un cambio utilizando sed

11

Este script usa sed para cambiar todo "" a "cosas nuevas". ¿Cómo cambiaría uno solo el "" después del yyy: usando sed o cualquier otra cosa?

cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt
CW Holeman II
fuente

Respuestas:

8

Puede que no entienda tu pregunta. Si desea reemplazar SOLO el valor después de 'aaa', use la respuesta anterior. Si desea reemplazar CUALQUIER valor después de 'aaa', intente con esta línea:

sed --expression='/yyy/,$ s/""/"new stuff"/g' sample.txt

No lo he probado: D ...


fuente
3

Respuesta obtenida de O'Reilly - Sed & Awk 2nd Addition Around página 152

Escribe un guión en un archivo

/yyy\:$/{
N
s/yyy\:\n\"\"/yyy\:\
\"new stuff\"/
}

Aplica esto a tus datos con la habitual

sed -f script sample.txt

Este script dice buscar yyy :. Cuando lo encuentre, lea otra línea en el búfer de patrón (suena como Star Trek Transporter). Ahora haga como / comando en las líneas unidas. Entonces estamos buscando aaa: nueva línea "". Si lo encuentra, reemplácelo con yyy: \ note la barra diagonal inversa de la nueva línea y luego "cosas nuevas"

Buena suerte


fuente
1
vea la página de manual : unixhelp.ed.ac.uk/CGI/man-cgi?sed búsqueda de direcciones párrafo
1

Encuentro que una vez que las cosas superan un cierto nivel de complejidad, cambio a Perl . s2p se encargará de la traducción de su solución sed actual. O podrías escribirlo desde cero trivialmente. La expresión de búsqueda / reemplazo seguirá siendo la misma.

Brian Agnew
fuente