2

如何删除 perl 脚本中 txt 文件的第一行?

`sed "1d" filename.txt` 

不工作。

4

4 回答 4

2

您可以使用Tie::File

use Tie::File;
tie @array, 'Tie::File', $filename or die $!;
shift @array;
untie @array;
于 2012-06-06T17:00:09.477 回答
1
`sed 1d filename.txt > newfile.txt` 

应该管用。如果你不将它重定向到一个文件,它只会读取整个文件减去第一行到标准输出。

于 2012-06-06T16:50:14.457 回答
0

因为您使用内联 sed 执行此操作,所以这里是 Perl 等价物。

perl -ne'$.==1?next:print' <(seq 1 10)

选项意味着什么,

-n                assume "while (<>) { ... }" loop around program
-e program        one line of program (several -e's allowed, omit programfile)

其他注意事项,

  • $.是当前行号的变量。
  • <()是用于在后台生成 FIFO 的 Bash 巫术。
于 2012-06-09T05:52:37.660 回答
0

这会将输出发送到sed的 STDOUT(Perl 继续捕获到变量中)而不是filename.txt. 你想使用sed's -i

sed -i "1d" filename.txt

由于没有要捕获的输出,因此使用反引号是没有意义的。你想要system

system('sed -i "1d" filename.txt');

更好:(避免启动另一个外壳)

system('sed', '-i', '1d', 'filename.txt');

最佳:(是否为您检查错误)

use IPC::System::Simple qw( systemx );
systemx('sed', '-i', '1d', 'filename.txt');
于 2012-06-06T16:56:25.600 回答