所以我知道您可以编写Perl单行代码,该行使用非默认记录分隔符读取记录,并带有类似的选项
perl -064 -ne '#... delimited by @'
或将整个文件排成一行:
perl -0777 -ne '#... file at once'
我还知道,如果您以编程方式将记录分隔符$\
设置为对数字的引用,则可以读取固定宽度的记录。
perl -ne '$/ = \10; #... 10 chars at a time'
但是我找不到使用-0
选项读取固定宽度记录的方法。这可能吗?
答案 0 :(得分:9)
没有命令行开关。
从perlrun,
-0 [八进制/十六进制]
将输入记录分隔符(
$/
)指定为八进制或十六进制数字。如果没有数字,则空字符为分隔符。其他开关可能在数字之前或之后。例如,如果您使用的find版本可以打印以空字符结尾的文件名,则可以这样说:find . -name '*.orig' -print0 | perl -n0e unlink
特殊值00将使Perl在段落模式下提取文件。任何值为0400或更高的值都会导致Perl吞噬整个文件,但是按照惯例,值0777是通常用于此目的的值。
您还可以使用十六进制表示法指定分隔符: -0x HHH ... ,其中
H
是有效的十六进制数字。与八进制格式不同,此格式可用于指定任何Unicode字符,甚至包括0xFF以外的字符。因此,如果您确实想要记录分隔符0777,请将其指定为 -0x1FF 。 (这意味着您不能将 -x 选项与包含十六进制数字的目录名一起使用,否则Perl会认为您已将十六进制数字指定为 -0 。 )
您当然可以使用以下内容:
perl -ne'BEGIN { $/ = \10 } ...'
或
perl -e'$/ = \10; while (<>) { ... }'