输入:
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/sh
HP 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 给出不同结果的原因。