2010-07-15 54 views

回答

0

你不提到RE的方言。但是,例如:

$ echo 'r100000|Tom Sawyer|2010-12-01|view.txt' | \ 
    perl -pe 's/^(r\d+)\|([^|]+)\|([0-9-]+)\|(.+)/ID:\1 NAME:\2 DATE:\3 FILENAME:\4/' 
ID:r100000 NAME:Tom Sawyer DATE:2010-12-01 FILENAME:view.txt 
2

更簡單的方法是使用分隔符將字符串分解爲字段。既然你有管道「|」作爲分隔符,然後使用它。不需要複雜的正則表達式。另外,如果你下次有更多的領域呢?

下面是一個使用awk(你可以使用Perl的-F選項以及)

$ awk -F"|" '{print "ID:"$1" Name:"$2" Date:"$3" filename:"$4}' file 
ID:r100000 Name:Tom Sawyer Date:2010-12-01 filename:view.txt 

的Perl相當於

$ perl -F"\|" -ane 'print "ID:$F[1] Name: $F[2] Date:$F[3] filename:$F[4]"' file 
ID:Tom Sawyer Name: 2010-12-01 Date:view.txt 
4
$line = 'r100000|Tom Sawyer|2010-12-01|view.txt'; 
@fields = split /\|/, $line; 
print $fields[0]; # r100000 
2

如果你想使用正則表達式解析它,

你可以試試這個:

$line = r100000|Tom Sawyer|2010-12-01|view.txt; 

if($line =~ /^([^|]+)\|([^|]+)\|([^|]+)\|([^|]+)$/) 
{ 
$id = $1; 
$name = $2; 
$date = $3; 
$filename = $4 
} 
0
use Data::Dumper; 
my %h; 
my $line = 'r100000|Tom Sawyer|2010-12-01|view.txt'; 
@h{qw/ID NAME DATE FILENAME/} = (split /\|/, $line); 
print Dumper(\%h);