Teste sed
com o seguinte regex:
$ sed -i.bak 's_\(.*\),[[:blank:]]\([[:alpha:]]\+,[[:blank:]][[:alpha:]]\+[[:blank:]][[:digit:]]\+,[^,]\+$\)_ _' file.txt
Friday, Mar 13,2015 16:59:42 blah, blah, blah
Friday, Mar 13,2015 16:51:11 yadi, yadi, yada
Aqui usamos o método de substituição de grupo sed
para obter o resultado desejado.
-
\(.*\)
corresponderá atéblah, blah, blah
, pois temos,[[:blank:]]
para corresponder a,
depois disso. -
\([[:alpha:]]\+,[[:blank:]][[:alpha:]]\+[[:blank:]][[:digit:]]\+,[^,]\+$\)
corresponderá à parte restante da linha (a parte que queremos colocar no início).
Em seguida, temos
para colocar o segundo grupo primeiro e depois um espaço e depois o primeiro grupo.
Será feito o backup do arquivo original como file.txt.bak
, se você não quiser usar apenas -i
em vez de -i.bak
.
** Embora você tenha a saída desejada, usar o Regex / sed não será a solução ideal nesse caso.
EDITAR: Se você tem uma linha como [Internet disconnected] Friday, Mar 13,2015 15:48:34
, tente isto:
$ sed -i.bak 's_\(.*[^,]\),*[[:blank:]]\([[:alpha:]]\+,[[:blank:]][[:alpha:]]\+[[:blank:]][[:digit:]]\+,[^,]\+$\)_ _' file.txt
Friday, Mar 13,2015 15:48:34 [Internet disconnected]
Friday, Mar 13,2015 16:59:42 blah, blah, blah
Friday, Mar 13,2015 16:51:11 yadi, yadi, yada
Na regex anterior, tínhamos \(.*\),[[:blank:]]
(uma vírgula e um espaço em branco após o primeiro grupo correspondente), agora para incluir a nova linha na saída, fizemos o primeiro grupo correspondente \(.*[^,]\)
para garantir que ele não terminamos com uma vírgula e depois combinamos ,*
, isto é, uma ou mais vírgulas. Portanto, o novo comando sed
funcionará para todos os casos mencionados.