Perl命令没有给出预期的输出
命令:Perl命令没有给出预期的输出,perl,Perl,命令: perl -lpe '1 while (s/(^|\s)(0\d*)(\s|$)/$1"$2"$3/)' test5 输入: perl -lpe '1 while (s/(^|\s)(0\d*)(\s|$)/$1"$2"$3/)' test5 1234 012345 0 0.000 01234 0 01/02/03 5467 0abc 012340123 0000 000054 0asdf 0we23-1 电流输出: perl -lpe '1 while (s/(^|\s)(0\d*
perl -lpe '1 while (s/(^|\s)(0\d*)(\s|$)/$1"$2"$3/)' test5
输入:
perl -lpe '1 while (s/(^|\s)(0\d*)(\s|$)/$1"$2"$3/)' test5
1234 012345 0
0.000 01234 0
01/02/03 5467 0abc
012340123
0000 000054
0asdf 0we23-1
电流输出:
perl -lpe '1 while (s/(^|\s)(0\d*)(\s|$)/$1"$2"$3/)' test5
1234“012345”0
0.000“01234”0
01/02/03 5467“0abc”
“01234”“0123”
“0000”“000054”
0asdf 0we23-1
例外输出:
perl -lpe '1 while (s/(^|\s)(0\d*)(\s|$)/$1"$2"$3/)' test5
1234“012345”0
0.000“01234”0
01/02/03 5467“0abc”
“01234”“0123”
“0000”“000054”
“0asdf”“0we23-1”
输出中要遵循的条件:
perl -lpe '1 while (s/(^|\s)(0\d*)(\s|$)/$1"$2"$3/)' test5
这似乎是您想要的:
#!/usr/bin/env perl
use strict;
use warnings;
while ( <DATA> ) {
my @fields = split;
s/^(0[^\.\/]+)$/"$1"/ for @fields;
print join " ", @fields, "\n";
}
__DATA__
1234 012345 0
0.000 01234 0
01/02/03 5467 0abc
01234 0123
0000 000054
0asdf 0we23-1
因为这也会占用空间
join "", @fields;
可使用-a
将其简化为一个用于自动分裂的内衬:
perl -lane 's/^(0[^\.\/]+)$/"$1"/ for @F; print join " ", @F'
如果要执行第二位(严格保留空白),则需要删除
-a
并自己使用拆分 1 while
的作用是什么?为什么要在这里创建一个神奇的正则表达式,而解决这个问题要简单得多(例如,“0we23-1”如何在模式拾取字符串时被引用?在我的场景中,您的解决方案非常有效。有一件事,我们如何从任何文本文件而不是标量值传递变量或数据,而是使用
,它将在命令行上读取STDIN或文件-与grep
/sed
/awk
函数的方式相同。