2017-04-06 8 views
0

ファイルの最後の行を削除するにはどうすればよいですか?ファイル全体を読み取ったり、一時ファイルで書き直したりすることはできません。私はメモリ全体にファイルを読み込むときにsedを使いたくない。 最後に空白行があります。私はそれを削除し、そのファイルに変更を保存して、ファイルに最後に空白行が含まれないようにしたい。ファイルから最後の空白行を削除してファイルを保存します。

答えて

1

私は考えることができる最も簡単な方法は次のとおりです。

のみ空白エンドラインを削除するように編集
sed -i '${/^$/d}' filename 

ファイル全体を読み取らないsedを使用しない唯一のオプションは、statにサイズを取得してから、ddを使用して読み取りを開始する前に終了することです。しかし、sedに最後の行だけを実行するように指示するのは、本質的にそれです。

+0

のsed -i -u ... -uをこの場合、*バッファリングされていない*ので、低メモリ使用 – NeronLeVelu

+0

以来の意味あなたは最終的に飛び降りていますが、特に大きなファイルの場合、プロセスのスピードを上げるために、バッファされた読み込みを使用したいと思うでしょう。 –

+0

バッファリングされたスピード書き込みプロセスですが、問題はメモリであり、プロセススピードではありませんOP – NeronLeVelu

0

Remove the last line from a file in Bash

編集を見てみましょう:私は

dd if=/dev/null of=<filename> bs=1 seek=$(echo $(stat --format=%s <filename>) - $(tail -n1 <filename> | wc -c) | bc) 

をテストし、それはあなたが最後の行を削除する

1

簡単なsedコマンドを望むものを行います。

sed '$d' <file> 
ここでsed $の

が最後の行です。

あなたはawkのコマンドを試すことができます。

awk 'NR > 1{print t} {t = $0}END{if (NF) print }' file 

猫使い方:

cat file.txt | head -n -1 > new_file.txt 
関連する問題