У меня есть текстовый файл:
13/03/2015 09:21:02 Descrição de log (Sessão terminada);name.lastname -- 127.0.0.1:66666 -> 0.0.0.0 -- 00:01 -- 13/03/2015 09:21:02 Descrição de log (Autenticação realizada com sucesso);name.lastname.....
Я хотел бы знать, как я могу сломать линию каждый раз, когда у меня есть дата. Модель будет равна dd/mm/yyyy. Таким образом, текст, наконец, будет выглядеть следующим образом:
13/03/2015 09:21:02 Descrição de log (Sessão terminada);name.lastname -- 127.0.0.1:66666 -> 0.0.0.0 -- 00:01 --
13/03/2015 09:21:02 Descrição de log (Autenticação realizada com sucesso);name.lastname.....
Может ли кто-нибудь помочь мне с этим? Может быть java-код, sed, awk, что угодно...
Благодарю.
С GNU sed:
sed -r 's, ([0-9]{2}/[0-9]{2}/[0-9]{4} ),\n\1,g' filename
Часть [0-9]{2}/[0-9]{2}/[0-9]{4}
регулярного выражения соответствует шаблону даты; все регулярное выражение совпадает с ним, окруженное пробелами, чтобы избежать ложных срабатываний, и потому, что ваши данные примера показывают, что вход соответствует этому формату. ,
используется как разделитель вместо /
в команде s
потому что регулярное выражение поиска содержит косые черты.
С perl:
perl -pe 's{(?<=.)(?=\d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2})}{\n}g'
Это использует look-arounds, чтобы найти место перед датой, которая не находится в начале строки, и помещает туда новую строку.