Perl - Regex для чтения файла журнала - PullRequest
3 голосов
/ 09 марта 2012

Я прочитал и не нашел ответа. Я хочу прочитать файл журнала и распечатать все после ":", но в некоторых журналах есть место, прежде чем некоторые не будут. Я хочу, чтобы соответствовать только один с не пробел в начале.

_thisnot: this one has space
thisyes: this one has not space at the beginning.

Я хочу сделать это для каждой строки в файле.

Ответы [ 3 ]

1 голос
/ 09 марта 2012

Или вы можете использовать один лайнер, как:

perl -ne 's/^\S.*?:\s*// && print' file.log
1 голос
/ 09 марта 2012

Как насчет:

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

my %result;
while(<DATA>) {
    chomp;
    next if /^\s/;
    if (/^([^:]*):\s*(.*)$/) {
        $result{$1} = $2;
    }
}

__DATA__
 thisnot: this one has space
thisyes: this one has not space at the beginning.
0 голосов
/ 09 марта 2012
# Assuming you opened log filehandle for reading...
foreach my $line (<$filehandle>) {
    # You can chomp($line) if you don't want newlines at the end
    next if $line =~ /^ /; # Skip stuff that starts with a space
              # Use  /^\s/ to skip ALL whitespace (tabs etc)
    my ($after_first_colon) = ($line =~ /^[^:]*:(.+)/);
    print $after_first_colon if $after_first_colon; # False if no colon. 

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...