1. ホーム
  2. バッシュ

[解決済み】Bash: 出力から末尾の改行を取り除く

2022-04-03 13:57:16

質問

Bashでコマンドを実行すると(具体的には。 wc -l < log.txt ) の後に改行が含まれて出力されます。これを取り除くにはどうしたらよいでしょうか?

どのように解決するのですか?

期待される出力が1行の場合 であれば、出力からすべての改行文字を削除すればよい。にパイプすることも珍しくはないだろう。 tr ユーティリティ、またはお好みでPerlに転送します。

wc -l < log.txt | tr -d '\n'

wc -l < log.txt | perl -pe 'chomp'

また、コマンド置換を使用して、末尾の改行を削除することも可能です。

echo -n "$(wc -l < log.txt)"

printf "%s" "$(wc -l < log.txt)"


期待される出力が複数行を含む可能性がある場合 の場合、別の判断が必要です。

ファイル末尾の改行文字を複数削除したい場合は、再度cmd置換を使用します。

printf "%s" "$(< log.txt)"

ファイルから最後の改行文字を厳密に削除したい場合は、Perlを使用してください。

perl -pe 'chomp if eof' log.txt


なお、削除したい末尾の改行文字があることが確実な場合は head を使えば、最後の1バイトを除くすべてを選択することができます。これはかなり速いはずです。

head -c -1 log.txt

また、念のため、改行文字 (あるいはその他の特殊文字) がファイル内のどこにあるか、次のようにしてすぐに確認できます。 cat と 'show-all'フラグ -A . ドル記号文字は、各行の終端を示します。

cat -A log.txt