El contenido de mi filename
archivo es el siguiente (por ejemplo):
My block of line starts from here
START
First line
second line
third line
END
and end to here for example.
Quiero reemplazar el bloque de líneas entre START
y END
con una sola palabra, por ejemplo con SINGLEWORD
. Como abajo:
My block of line starts from here
SINGLEWORD
and end to here for example.
Puedo encontrar mi bloque de líneas con este comando:
grep -Pzo "START(.|\n)*END" filename
Y el resultado de ejecutar el comando anterior será así:
START
First line
second line
third line
END
Luego usé este comando para combinar todas las líneas en una sola línea:
LAST_RESULT | sed -e :a -e '/$/N; s/\n/ /; ta'
Entonces obtendré este resultado:
START First line second line third line END
Y con mi último comando los LAST_RESULTS | sed 's/.*/SINGLEWORD/'
cambio "SINGLEWORD"
y obtengo este resultado.
SINGLEWORD
Ahora lo que quiero es: ¿Cómo puedo usar este comando (o el comando de su sugerencia) y reemplazar (en su lugar) mi bloque de líneas a la palabra "SINGLEWORD"? Y el resultado final será como este archivo:
My block of line starts from here
SINGLEWORD
and end to here for example.
fuente
sed
debería ser posible pero probablemente más difícil de leer (Mira esta pregunta )/
,*
,?
) en el mismo y estas son solo ejemplo. y podrías explicar tu ordensed
):\/
,\*
,\?
perl -i -p0e 's/\/\*.*?\*\//SINGLEWORD/sm'
. Debería funcionarMe preguntaba si esto es posible sin
perl
,python
y otros. Y encontré esta solución usandosed
:Explicación:
/START.*END/
porSINGLEWORD
, / g coincidencia global (tantas veces como sea posible)Fue encontrado aquí .
@KasiyA, ¡gracias, aprendí muchas cosas interesantes!
fuente