que es bastante fácil de hacer con sed y que ni siquiera tienen que utilizar el espacio de bodega (la memoria intermedia auxiliar sed). Dado el archivo de input
a continuación:
$ cat input
@"Afghanistan.png",
@"Albania.png",
@"Algeria.png",
@"American_Samoa.png",
se debe utilizar este comando:
sed 's/@"\([^.]*\)\.png",/&\
@"\1",/' input
El resultado:
$ sed 's/@"\([^.]*\)\.png",/&\
@"\1",/' input
@"Afghanistan.png",
@"Afghanistan",
@"Albania.png",
@"Albania",
@"Algeria.png",
@"Algeria",
@"American_Samoa.png",
@"American_Samoa",
Este comando es simplemente un comando de reemplazo (s///
). Coincide con cualquier cosa que comience con @"
seguido por caracteres que no sean de punto ([^.]*
) y luego por .png",
. Además, coincide con todos los caracteres que no sean de punto antes de .png",
utilizando los corchetes de grupo \(
y \)
, por lo que podemos obtener lo que coincide con este grupo. Por lo tanto, esta es la expresión regular que debe sustituirse:
@"\([^.]*\)\.png",
Sigue la parte de reemplazo del comando. El comando &
simplemente inserta todo lo que coincide con @"\([^.]*\)\.png",
en el contenido modificado. Si fuera el único elemento de la pieza de reemplazo, no se cambiaría nada en la salida. Sin embargo, después del &
hay un carácter de línea nueva representado por la barra invertida \
seguida de una nueva línea real, y en la línea nueva agregamos la cadena @"
seguida del contenido del primer grupo (\1
) y luego la cadena ",
.
Esto es solo una breve explicación del comando. Espero que esto ayude. Además, tenga en cuenta que puede usar la cadena \n
para representar nuevas líneas en algunas versiones de sed (como GNU sed). Se haría un comando más concisa y fácil de leer:
sed 's/@"\([^.]*\)\.png",/&\[email protected]"\1",/' input
excepcional. No le importaría explicar su línea de comando fu, ¿verdad? –
Solo intentaba explicarlo incluso antes de leer su comentario :) Espero que aclare la solución. Sería un placer responder cualquier pregunta restante al respecto. – brandizzi