15

簡単なシェル コマンドで行の最後の 10 行だけを保持することは可能ですか?

tail -n 10 test.log

正しい結果が得られますが、test.log 自体を変更する方法がわかりません。と

tail -n 10 test.log > test.log

動作しません。

4

5 に答える 5

19

tempfile を使用して実行できます。

tail -n 10 test.log > test1.log

mv test1.log test.log
于 2010-09-23T04:11:51.147 に答える
13
echo "$(tail -n 10 test.log)" > test.log

引用符は重要です。改行文字を保持します。

于 2015-07-10T02:29:20.043 に答える
2

呼び出した 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」) を入力する必要があります。

于 2010-09-23T12:36:11.433 に答える
1
ruby -e 'a=File.readlines("file");puts a[-10..-1].join' > newfile
于 2010-09-24T01:43:54.937 に答える
1

また、変数を使用することもできます:

LOG=$(tail -n 10 test.log)
echo "$LOG" > test.log
于 2015-04-24T17:26:58.943 に答える