Perl 脚本在 Linux 上的 bash shell 和 HP unix 上的 /sbin/sh shell 上提供不同的输出

Perl 脚本在 Linux 上的 bash shell 和 HP unix 上的 /sbin/sh shell 上提供不同的输出

输入:

tmp# cat test5
1234      012345
0.000             01234
01/02/03          5467
01234           0123
05554567       234
0099
0000           000054

Bash shell 上的输出:

[tmp]# perl -lpe 's#(^|\h)\K0[^./\h]+(?=\h|$)#"$&"#g' test5
1234      "012345"
0.000             "01234"
01/02/03          5467
"01234"           "0123"
"05554567"       234
"0099"
"0000"           "000054"

/sbin/shHP Unix 上 shell 的输出:

/tmp # perl -lpe 's#(^|\h)\K0[^./\h]+(?=\h|$)#"$&"#g' test5
1234      012345
0.000             01234
01/02/03          5467
01234           0123
05554567       234
0099
0000           000054

答案1

看起来你想要写一封信引用所有以零开头的整数值。这是实现此目标的更简单的 RE:

perl -lpe '1 while (s/(^|\s)(0\d*)(\s|$)/$1"$2"$3/)' test5

1234      "012345"
0.000             "01234"
01/02/03          5467
"01234"           "0123"
"05554567"       234
"0099"
"0000"           "000054"

答案2

两台机器运行不同版本的 Perl,shell 的差异与之无关。

HP-UX 上的 Perl 是,根据阿彻玛、Perl 5.8.8、以及正向后查找转义\K\h水平空白转义两者都在 Perl 5.10 中添加这就是为什么两个 Perls 给出不同结果的原因。

相关内容