Estoy trabajando con registros de chat y quiero formatearlos.
Se ven exactamente así, incluidos los símbolos #:
Tuesday, February 24, 2015
##Person1 (21:22:01): hello
##Person2 (21:22:37): hi
Wednesday, February 25, 2015
##Person1 (13:12:43): hey
##Person2 (13:13:04): hey
La fecha solo se publica para cada nuevo día y me gustaría que tuviera un formato similar a este, para que funcione en una hoja de cálculo:
Tuesday, February 24, 2015
Tuesday, February 24, 2015##Person1 (21:22:01): hey
Tuesday, February 24, 2015##Person2 (21:22:37): hi
Wednesday, February 25, 2015
Wednesday, February 25, 2015##Person1 (13:12:43): hey
Wednesday, February 25, 2015##Person2 (13:13:04): hey
Después de eso, puedo eliminar fácilmente las líneas que no contienen la cadena ## para deshacerme de las líneas de solo fecha.
¿Hay alguna forma de hacer que Notepad++ agregue la línea completa más reciente que contiene una cadena desde la fecha (como \d{1,2}, 201\d{1}$
) hasta el comienzo de cada línea debajo (hasta la siguiente instancia)?
Respuesta1
Me temo que esto no se puede hacer en Notepad++.
Aquí hay una sola línea de Perl que hace el trabajo.
perl -ane '$date = $1 if /^(\w+,\h+\w+\h+\d\d?,\h+20\d\d)/;s/^(?=##)/$date/ && print;' file.txt
Si desea reemplazar el archivo en su lugar, use:
perl -i -ane '$date = $1 if /^(\w+,\h+\w+\h+\d\d?,\h+20\d\d)/;s/^(?=##)/$date/ && print;' file.txt
Producción:
Tuesday, February 24, 2015##Person1 (21:22:01): hello
Tuesday, February 24, 2015##Person2 (21:22:37): hi
Wednesday, February 25, 2015##Person1 (13:12:43): hey
Wednesday, February 25, 2015##Person2 (13:13:04): hey
Explicación de expresiones regulares:
/ # delimiter
^ # beginning of line
( # start group 1
\w+ # 1 or more word character
, # a comma
\h+ # 1 or more horizontal spaces
\w+ # 1 or more word character
\h+ # 1 or more horizontal spaces
\d\d? # 1 or 2 digits
, # a comma
\h+ # 1 or more horizontal spaces
20\d\d # 20 and 2 digits
) # end group 1
/ # delimiter
s/ # substitute, delimiter
^ # beginning of line
(?=##) # positive lookahead, zero-length assertion that make sure we have ## at the beginning
/ # delimiter
$date # the date found with the preceding regex
/ # delimiter