Автоочистка форматов журналов - PullRequest
0 голосов
/ 24 июля 2010

Я столкнулся с несколькими различными ситуациями, когда мне нужно реализовать регулярное выражение "очистки журнала". Я должен был повторно реализовать пару раз, но основной вариант таков:

Оригинал

(23:59:59)
Username says:
user inputted text
(00:00:13)
Username
user inputted action
(00:01:42)
Username says:
user inputted text
(00:02:13)
Username says:
user inputted text

Я ищу хорошее регулярное выражение, которое преобразует его в:

(23:59:59) Username says: user inputted text
(00:00:13) Username user inputted action 
(00:01:42) Username says: user inputted text
(00:02:13) Username says: user inputted text

Какой у вас угол атаки и почему?

Ответы [ 2 ]

1 голос
/ 24 июля 2010

В Perl, согласно вашему входному примеру:

#!/usr/bin/perl
use strict;
use warnings;

my @l;
my $str;
while(<DATA>) {
  chomp;
  $str .= $_." ";
  unless($.%3) {
    push @l,$str,"\n";
    $str = '';
  }
}
print @l;

__DATA__
(23:59:59)
Username says:
user inputted text
(00:00:13)
Username
user inputted action
(00:01:42)
Username says:
user inputted text
(00:02:13)
Username says:
user inputted text

Ouput:

(23:59:59) Username says: user inputted text 
(00:00:13) Username user inputted action 
(00:01:42) Username says: user inputted text 
(00:02:13) Username says: user inputted text 
1 голос
/ 24 июля 2010

Если регулярное выражение не является абсолютно необходимым,

awk '/^\(/{print ""}{printf "%s ",$0}' file

логика заключается в том, чтобы печатать все строки без перевода строки, кроме случаев, когда "(" встречается в качестве первого символа. Это может быть реализовано на любом языке.

Баш

#!/bin/bash

while read -r LINE
do
 case "$LINE" in
   "("* ) echo
 esac
 printf "%s " $LINE
done<"file"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...