1. 概要

余分な改行を出力するバグのあるコマンドの出力を保存するなど、さまざまな理由により、末尾の改行がファイルに含まれる可能性があります。 このチュートリアルでは、ファイルから末尾の改行文字を削除する方法を学習します。

2. 後続の単一のNewlineを削除する

ファイルから末尾の新しい行を1つ削除するために使用されるコマンドを見てみましょう。

以下の例では、wc-lコマンドを使用して改行の数をカウントします。

2.1. perlを使用する

まず、サンプルファイルの内容を確認しましょう。

$ cat bad.txt
one newline
$ wc -l bad.txt
1 bad.txt

ここで、 wc -l は、ファイルに1つの末尾の改行が含まれているため、1を出力します。

これで、perlchomp関数を使用して、改行の場合は最後の文字を削除できます。

$ perl -p -i -e 'chomp if eof' bad.txt
$ wc -l bad.txt
0 bad.txt

ご覧のとおり、 wc -l は、末尾の改行を削除した後、0を出力します。 -p フラグを使用して出力を出力し、 -i フラグを使用して出力をファイルに書き込みます。一方、-eを使用するとPerlを渡すことができます。引数としてのコード。

if eof ステートメントは、その文字が最後の文字、つまりファイルの最後にあることを示します。 この方法は、 perl コマンドを1つだけ呼び出すため、非常に効率的です。

2.2. ヘッドテールを使用

tail コマンドを使用して最後の文字が改行であるかどうかをテストし、headコマンドを使用してそれを削除できます。

$ cat bad.txt
one newline
$ wc -l bad.txt
1 bad.txt
$ if [ "$(tail -c 1 bad.txt | wc -l)" = 1 ]; then head -c -1 bad.txt > tmp; mv tmp bad.txt; fi
$ wc -l bad.txt 
0 bad.txt

ここで、 wc-lの出力は前の例と同様です。 -c 1 フラグは、ファイルの最後の文字を取得します。 この文字をwcにパイプして、改行かどうかを確認します。 そうである場合は、 head -c -1 を使用して、最後の文字を除くファイル全体を印刷し、改行を削除します。

このメソッドは一時ファイルを使用し、元のファイルをそれで上書きします。 したがって、1つではなく2つのコマンドを呼び出すため、 perl、を使用する方法よりも効率が低くなります。

3. 末尾の改行をすべて削除する

最後の末尾の改行を削除するだけでなく、ファイルからすべての末尾の改行を削除できます。

まず、ファイルの内容を見てみましょう。

$ cat bad.txt
many newlines



$ wc -l bad.txt
4 bad.txt

ここで、 wc -l は、ファイルに4つの末尾の改行が含まれているため、4を出力します。

Bashの組み込みのprintfコマンドを使用して、末尾の改行を削除できます。

$ printf "%s" "$(< bad.txt)" > tmp
$ mv tmp bad.txt 
$ wc -l bad.txt
0 bad.txt

私たちはそれを見ることができます wc -l 出力 0 末尾の改行を削除した後。 $(<)演算子を使用してファイルをメモリにロードし、printfに渡します。 Bashは、ファイルを読み取るときに末尾の改行を自動的に削除します。

4. 結論

この記事では、ファイルの末尾から単一および複数の末尾の改行を削除するためのさまざまなコマンドの使用方法を学びました。