Perl 字符串解析多种模式
Perl String parsing multiple patterns
我正在尝试解析具有多个模式的文本文件。
目标是让所有东西都在 * * 之间,只有整数在 ^ ^ 如果找到,它应该删除所有特殊字符或字符串。
data.txt
*ABC-13077* ^817266, 55555^
*BCD-13092* ^CL: 816933^
*CDE-13127* ^ ===> Change 767666 submitted^
output.txt
ABC-13077 817266 55555
BCD-13092 816933
CDE-13127 767666
我的脚本
#!/usr/bin/perl
use strict;
use Cwd;
my $var;
open(FH,"changelists.txt")or die("can't open file:$!");
while($var=<FH>)
{
my @vareach=split(/[* \s\^]+/,$var);
for my $each(@vareach)
{
print "$each\n";
}
}
将 while 循环替换为以下内容:
while (<FH>) {
s/\*(.*)\*//;
s/\^(.*)\^/ join ' ', =~ m([0-9]+)g /e;
print;
}
第一个替换删除了星号。
第二次替换取 ^...^
部分,由于 /e
修饰符,将其替换为替换部分中代码的结果。该代码匹配所有整数,并且由于 join
在匹配项上强制列出上下文,它 returns 所有匹配项。
我正在尝试解析具有多个模式的文本文件。 目标是让所有东西都在 * * 之间,只有整数在 ^ ^ 如果找到,它应该删除所有特殊字符或字符串。
data.txt
*ABC-13077* ^817266, 55555^
*BCD-13092* ^CL: 816933^
*CDE-13127* ^ ===> Change 767666 submitted^
output.txt
ABC-13077 817266 55555
BCD-13092 816933
CDE-13127 767666
我的脚本
#!/usr/bin/perl
use strict;
use Cwd;
my $var;
open(FH,"changelists.txt")or die("can't open file:$!");
while($var=<FH>)
{
my @vareach=split(/[* \s\^]+/,$var);
for my $each(@vareach)
{
print "$each\n";
}
}
将 while 循环替换为以下内容:
while (<FH>) {
s/\*(.*)\*//;
s/\^(.*)\^/ join ' ', =~ m([0-9]+)g /e;
print;
}
第一个替换删除了星号。
第二次替换取 ^...^
部分,由于 /e
修饰符,将其替换为替换部分中代码的结果。该代码匹配所有整数,并且由于 join
在匹配项上强制列出上下文,它 returns 所有匹配项。