Bueno, eso es algo que se puede hacer desde la línea de comandos:
- Código: Seleccionar todo
perl -p -i -e 's/^Nombres:.+?\KPaco\s+//' kk.txt
Explicación:
- la opción -p hace recorrer por líneas el archivo kk.txt (el archivo que queremos modificar)
- la opción -i indica que vamos a realizar una transformación en el propio archivo (in situ)
- la opción -e señala el comiendo del programa Perl a ejecutar por cada línea leída
- dentro del programa, las líneas leídas se meten en la variable por defecto $_, así que todos los operadores y funciones saben dónde está la información a procesar
- lo que encontramos como programa es una única instrucción: una operación de sustitución (s///). Si la línea (aunque no se vea, $_) coincide con el patrón, lo encontrado es sustituido por la cadena de reemplazo
- el patrón quiere decir: «si la línea comienza (^) por la cadena 'Nombres:', seguida por uno o más caracteres (.+), seguidos inmediatamente (?) por la cadena 'Paco', y seguida a su vez por uno o más caracteres de espacio en blanco (\s+), entonces, deshecha todo lo encontrado hasta 'Paco' (\K)»
- si la línea coincide con ese patrón, sustituye lo encontrado ('Paco' y los espacios en blanco) por la cadena vacía (o sea, lo que hace es eliminarlo)
Al final tenemos el mismo archivo, pero sin el 'Paco'.
Esto lo puedes trasladar a un programa, pero claro, tendrás que escribir más líneas, para abrir archivos, leer por líneas, guardar el resultado en un espacio temporal, y escribir el resultado en el propio archivo (volver a abrir el archivo, escribir, cerrar). Depende de lo que necesites.
Más información en tu propio ordenador en
perldoc perlrun,
y en la Web (
traducido al español).
P.D. Sí que se puede activar el modo de edición en línea, dentro de un programa Perl, ahorrando líneas de código. Ver ejemplo en
perldoc perlfaq5, en la pregunta
How can I use Perl's "-i" option from within a program?