Perl命令行autosplit vs//

Perl命令行autosplit vs//,perl,Perl,我经常在命令行上使用Perl autosplit而不是cut。我遇到了一个案例,我有很多空白需要保留。根据文档,我需要指定的分隔符是/,因为像'这样的东西会模拟awk的行为,比如去掉前导空格等 我的问题是,似乎无法在命令行上指定/模式。我试着以各种方式引用它,但最终在正斜杠上出现了分裂: perl -F'/ /' -lane 'print "@F[3..$#F]"' input.txt 以下工作如预期: perl -lne '@ar = split / /; print "@ar[3..$#a

我经常在命令行上使用Perl autosplit而不是cut。我遇到了一个案例,我有很多空白需要保留。根据文档,我需要指定的分隔符是
/
,因为像
'
这样的东西会模拟awk的行为,比如去掉前导空格等

我的问题是,似乎无法在命令行上指定
/
模式。我试着以各种方式引用它,但最终在正斜杠上出现了分裂:

perl -F'/ /' -lane 'print "@F[3..$#F]"' input.txt
以下工作如预期:

perl -lne '@ar = split / /; print "@ar[3..$#ar]"' input.txt
为什么我的自动拆分不起作用以及如何修复它

RHEL 5.9上的Perl 5.8.8。

解决了“您不能在模式中放置文字空白”的限制:

perl -F\\x{20} ...
perl -F\\040   ...

如果您关心中间空间的数量,那么您需要捕获这些空间以及数据。我认为你想要的是
split/(\s+)/
的等价物

使用一个看起来像

  x  x  x
(这是
“\x20\x20x”x 3

还有一个命令行,比如

perl -MData::Dump -F/(\x20+)/ -anE"dd \@F" data.txt
你得到这个输出

["", "  ", "x", "  ", "x", "  ", "x\n"]

这有帮助吗?

perl-F/
就是您想要的。但这无助于保留多个空间。请举一个例子,它不起作用。返回空输出。尝试添加
-MO=Deparse
并查看与
perldoc perlrun
的区别:“
-Fpattern
指定要拆分的模式,如果
-a
也有效。该模式可能被
/
包围。”“
”或“
,否则它将被置于单引号中。您不能在模式中使用文字空白。“(强调添加)此外, '/Cuth>的行为类似于<>代码> /s+/< />代码,但它不带头空白。如果你不需要,也许你应该考虑使用更适合你需要的东西。这是我们实际上一无所知的东西。但是<代码> //< /代码>和<代码> /\s+/< /COD>相当。different@PhilippeA.字体我很高兴你来了一个答案,但我不清楚它是如何回答你的问题的。如果问题是你需要保留多个空格,那么这就不行了-它只是用几个空字符串填充了
@F
。请你把你的应用程序解释得更清楚一点好吗?@PhilippeA.:另外,
perl-aF'chr(20)
进行
拆分/chr(20)/
哪一个不是你想要的?Borodin:我发现了我的错误并删除了我以前的评论。@Borodin:mob解决方案适合我,因为我不需要访问单个数组字段。在标量上下文中打印时,我只需要有连续的空格。非常简短的故事:我在基于shell的测试套件中比较字符串。