Perl命令行autosplit vs//
我经常在命令行上使用Perl autosplit而不是cut。我遇到了一个案例,我有很多空白需要保留。根据文档,我需要指定的分隔符是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
/
,因为像'
这样的东西会模拟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
也有效。该模式可能被/
,包围。”“
”或“”
,否则它将被置于单引号中。您不能在模式中使用文字空白。“(强调添加)此外,@F
。请你把你的应用程序解释得更清楚一点好吗?@PhilippeA.:另外,perl-aF'chr(20)
进行拆分/chr(20)/
哪一个不是你想要的?Borodin:我发现了我的错误并删除了我以前的评论。@Borodin:mob解决方案适合我,因为我不需要访问单个数组字段。在标量上下文中打印时,我只需要有连续的空格。非常简短的故事:我在基于shell的测试套件中比较字符串。