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.