-7

我有一个输入文本文件input.txt,如图所示

a,2,3*b,4,5*c,7,3*

我必须按如下方式打印数字

a,2,3
b,4,5
c,7,3
4

6 回答 6

4

为什么你认为正则表达式会有所帮助?做起来容易得多

tr '*' '\n' <input.txt

如果您需要 Perl 解决方案,

perl -pe 'y/*/\n/' input.txt
于 2013-06-07T07:50:25.660 回答
1

您可以使用以下正则表达式

/[^*]/
于 2013-06-07T07:59:02.883 回答
1

您可以为此使用拆分:

 my $string = "a,2,3*b,4,5*c,7,3*";

 my @substr = split(/\*/, $string);

{
  local $, = "\n";
  print @substr;
}

输出:

a,2,3
b,4,5
c,7,3
于 2013-06-07T08:33:29.513 回答
1

您输入的记录由*? 我们可以将输入记录分隔符 $/设置为该值!

local $/ = "*";
while (<>) {
  chomp;
  print $_, "\n";
}

单线示例:

$ printf 'a,2,3*b,4,5*c,7,3*' | perl -lpe'BEGIN{$/="*"}'
a,2,3
b,4,5
c,7,3

(-l自动chomp输入,并将输出分隔符附加到输出。-p循环输入的所有记录,执行代码并打印 的值$_。我们自己不处理行,只需将记录分隔符从 更改*\n。 )

只要原始数据不包含换行符,这就可以正常工作:这些都是未经修改的。替换将s/\n//g在很大程度上解决这个问题。

于 2013-06-07T08:31:15.373 回答
0

你也可以试试这个:

 my $data = "a,2,3*b,4,5*c,7,3*";
 my $data2 = substr($data, 0, LengthOfSampleInputStringHere - 1);
 my @values = split('*',$data2);

 # Print and verify (Optional)
 foreach my $val (@values) 
 {
    print "${val}\n";
 }

编辑

你也可以使用这个正则表达式:

/([^\*]+)/
于 2013-06-07T09:14:21.397 回答
0

$string =~ s/\*/\n/g;应该为你做所有内联的替换

于 2013-06-07T12:41:22.337 回答