Bashでコマンドを実行すると(具体的にはwc -l < log.txt
)、出力の後に改行が含まれます。どうすればそれを取り除くことができますか?
9 に答える
予想される出力が単一行の場合、出力からすべての改行文字を単純に削除できます。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
GNU coreutils から使用して、最後のバイト以外のすべてを選択できることに注意してください。これはかなり速いはずです:
head -c -1 log.txt
cat
また、完全を期すために、「show-all」フラグを使用して、改行 (またはその他の特殊) 文字がファイル内のどこにあるかをすばやく確認できます-A
。ドル記号文字は、各行の終わりを示します。
cat -A log.txt
一方通行:
wc -l < log.txt | xargs echo -n
Bash 変数置換での空白の削除も直接サポートされています。
testvar=$(wc -l < log.txt)
trailing_space_removed=${testvar%%[[:space:]]}
leading_space_removed=${testvar##[[:space:]]}
行末なしでBashの出力を出力する場合は、-n
スイッチを使用してエコーします。
すでに変数に含まれている場合は、末尾の改行をトリミングしてエコーします。
$ testvar=$(wc -l < log.txt)
$ echo -n $testvar
または、代わりに1行で実行できます。
$ echo -n $(wc -l < log.txt)
その出力を変数に代入すると、bash
空白が自動的に削除されます。
linecount=`wc -l < log.txt`
printfは既に末尾の改行をトリミングしています:
$ printf '%s' $(wc -l < log.txt)
詳細:
- printf は、
%s
文字列プレースホルダーの代わりにコンテンツを印刷します。 - 改行 (
%s\n
) を印刷するように指示しないと、印刷されません。