¿Cómo escribo el siguiente comando sed para poder usar los saltos de línea y la estructura del código cuando escribo el comando sed, así como generar la misma estructura de código? Como puede ver, estoy tratando de modificar CSS sin convertirlo en una línea.

sed -i 's/#para3{ 
font-size:21pt;    
position:absolute; 
width:500px; 
left:15px;
top:445px; 
text-align:left;
  }/#para3{ 
font-size:testpt;    
position:absolute; 
width:500px; 
left:15px;
top:445px; 
text-align:left;
  }/g' $file0
2
calmchess 13 nov. 2017 a las 05:48

2 respuestas

La mejor respuesta

Si solo desea reemplazar el valor font-size entre #para3 { y el siguiente }:

sed '/#para3 *{/,/}/{s/\(font-size: *\)21pt;/\1testpt;/}' file

Para reemplazar todos los bloques, puede probar el comando c (cambiar):

sed '/#para3 *{/,/}/c \
#para3 { \
  font-size: 3em; \
  width: 100%; \
}' file

NB: después del comando c, todas las líneas excepto la última deben terminar con un carácter de nueva línea (\)

2
Tomas F 4 nov. 2018 a las 07:32

¿Por qué no procede de la siguiente manera?

  • Almacene el contenido de sus patrones de reemplazo css en 2 archivos (la parte que se reemplazará y la parte que se utilizará para la operación de reemplazo)
  • Utilice el comando cat para obtener el contenido de los archivos y almacenarlo en 2 variables var1="$(cat toReplace.css)"; var2="$(cat replacement.css)"
  • Utilice las 2 variables cuando llame al comando sed: sed -i.bak "s/$var1/$var2/g" $file0
  • Dado que está utilizando el reemplazo in situ, ¡sería mejor realizar una copia de seguridad de su archivo!
  • Por último, pero no menos importante, tendrá que escapar de todos los caracteres que podrían interpretarse como caracteres especiales en su expresión regular como {}, solo tiene que agregar una barra invertida antes de ellos.
0
Allan 13 nov. 2017 a las 03:01