我的输入文件包含如下数据:
X-X-D-X-X-A
X-D-X-A-X
D-X-X-X-X-A-X-X
我需要结果只给我
D-X-X-A
D-X-A
D-X-X-X-X-A
请帮助我!!
答案 0 :(得分:2)
你可以尝试,
open my $fh, "<", "file" or die $!;
while (my $line = <$fh>) {
$line =~ s/^[-X]+ | [-X]+(?=\s*$)//xg;
print $line;
}
close $fh;
或来自cmd行,
perl -pe 's/^[-X]+ | [-X]+(?=\s*$)//xg' file
答案 1 :(得分:2)
经过测试的代码:
my @a = qw[
X-X-D-X-X-A
X-D-X-A-X
D-X-X-X-X-A-X-X
];
for my $a (@a) {
if ($a =~ /(D[-X]+A)/) {
print $1,"\n";
}
}
答案 2 :(得分:0)
perl -lne 'print $1 if(/[^D]*(D.*A).*/)'
读取文件时在脚本内部:
while (my $line = <$fh>) {
$line =~ m/[^D]*(D.*A).*/g;
print $1;
}
正则表达式:
[^D]*(D.*A).*
[^D]*
行不得以D (D.*A)
捕捉(圆括号)从D到最后A的盯着
线。捕获的部分将存储在$ 1 .*
在字符串中留下了字符串。