簡単なシェル コマンドで行の最後の 10 行だけを保持することは可能ですか?
tail -n 10 test.log
正しい結果が得られますが、test.log 自体を変更する方法がわかりません。と
tail -n 10 test.log > test.log
動作しません。
tempfile を使用して実行できます。
tail -n 10 test.log > test1.log
mv test1.log test.log
echo "$(tail -n 10 test.log)" > test.log
引用符は重要です。改行文字を保持します。
呼び出した ed コマンド (テキスト エディター):
echo -e '1,-10d\nwq' | ed <filename>
これにより、行の削除 ('1,-10d')、ファイルの保存 ('w')、および終了 ('q') のコマンドが送信されます。
また、入力ファイルが 11 行未満の場合、ed は失敗する (戻りコードは 1) ことにも注意してください。
編集: vi エディター (または ex コマンド) を使用することもできます。
vi - +'1,-10d|wq' <filename>
ただし、入力ファイルが 10 行以下の場合、vi エディターは開いたままになり、終了するには「:q」(または ex コマンドで「q」) を入力する必要があります。
ruby -e 'a=File.readlines("file");puts a[-10..-1].join' > newfile
また、変数を使用することもできます:
LOG=$(tail -n 10 test.log)
echo "$LOG" > test.log