Obiettivo: vorrei reperire e parsare i messaggi di log di sistema di Windows. Alcuni messaggi sono multilinea con una descrizione estesa, ma visto che voglio crearmi un tabulato in formato .csv UTF8 (la conversione la faccio a posteriori) per convenienza vorrei recuperare solo la prima riga.
Problema: sembra che alcuni messaggi mutlilinea adottino la notazione unix (\n), altri utilizzano la notazione windows (\r\n), altri ancora ...boh!
Per catturare solo la prima riga ho già provato, senza successo, le seguenti espressioni regolari:
^(.*)[\r\n]+
^(.*)(\n|\r|\r\n)+
^(.*)\r*\n*
Nessuna di queste risolve tutte le possibili casistiche. L'unica soluzione che funziona sembra impiegare due espressioni regolari annidate:
Codice: Seleziona tutto
$message -match "^(.*)\r+"
if ($matches[1]) {
$string = $matches[1]
} else {
$message -match "^(.*)\n+"
if ($matches[1]) {
$string = $matches[1]
} else {
$string = $message
}
}