Perlスクリプトでtxtファイルの最初の行を削除するにはどうすればよいですか?
`sed "1d" filename.txt`
動作しません。
あなたが使用することができますTie::File
:
use Tie::File;
tie @array, 'Tie::File', $filename or die $!;
shift @array;
untie @array;
`sed 1d filename.txt > newfile.txt`
動作するはずです。ファイルにリダイレクトしない場合は、ファイル全体からstdoutへの最初の行を除いたものが読み取られます。
これは、出力をの代わりにsed
のSTDOUT(Perlが変数へのキャプチャに進む)に送信しますfilename.txt
。を使用したいsed
。-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');
インライン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ブードゥーです。