266

Bashでコマンドを実行すると(具体的にはwc -l < log.txt)、出力の後に改行が含まれます。どうすればそれを取り除くことができますか?

4

9 に答える 9

357

予想される出力が単一行の場合、出力からすべての改行文字を単純に削除できます。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

削除したい末尾の改行文字があることが確実な場合は、headGNU coreutils から使用して、最後のバイト以外のすべてを選択できることに注意してください。これはかなり速いはずです:

head -c -1 log.txt

catまた、完全を期すために、「show-all」フラグを使用して、改行 (またはその他の特殊) 文字がファイル内のどこにあるかをすばやく確認できます-A。ドル記号文字は、各行の終わりを示します。

cat -A log.txt
于 2012-09-21T04:39:19.990 に答える
90

一方通行:

wc -l < log.txt | xargs echo -n
于 2012-09-21T04:36:51.777 に答える
18

Bash 変数置換での空白の削除も直接サポートされています。

testvar=$(wc -l < log.txt)
trailing_space_removed=${testvar%%[[:space:]]}
leading_space_removed=${testvar##[[:space:]]}
于 2013-11-08T11:27:21.660 に答える
10

行末なしでBashの出力を出力する場合は、-nスイッチを使用してエコーします。

すでに変数に含まれている場合は、末尾の改行をトリミングしてエコーします。

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

または、代わりに1行で実行できます。

$ echo -n $(wc -l < log.txt)
于 2012-09-21T07:25:55.743 に答える
10

その出力を変数に代入すると、bash空白が自動的に削除されます。

linecount=`wc -l < log.txt`
于 2012-09-21T04:40:15.313 に答える
9

printfは既に末尾の改行をトリミングしています:

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

詳細:

  • printf は、%s文字列プレースホルダーの代わりにコンテンツを印刷します。
  • 改行 ( %s\n) を印刷するように指示しないと、印刷されません。
于 2012-09-21T22:32:05.770 に答える