Bashでコマンドを実行すると(または具体的にはwc -l < log.txt
)、出力の後に改行が含まれます。どうやってそれを取り除くのですか?
予想される出力が単一行の場合、出力からすべての改行文字を削除することができます。 '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)"
承認された回答を選択するというOPの決定には同意しません。可能であれば、 'xargs'の使用を避けるべきだと思います。はい、それはクールなおもちゃです。いいえ、あなたはここでそれを必要としません。
予想される出力に複数の行が含まれる可能性がある場合
ファイルの末尾から複数の改行文字を削除する場合は、もう一度cmd置換を使用します。
printf "%s" "$(< log.txt)"
ファイルからTHE LAST改行文字を厳密に削除したい場合は、Perlを使用してください。
Perl -pe 'chomp if eof' log.txt
削除したい末尾の改行文字が確実にある場合は、GNU coreutilsの 'head'を使用して、最後のバイト以外のすべてを選択できます。これはかなり速いはずです。
head -c -1 log.txt
また、完全を期すために、 'cat'と 'show-all'フラグを使用して、ファイル内の改行(またはその他の特殊)文字がどこにあるかを素早く確認することができます。ドル記号は各行の終わりを示します。
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
は自動的に空白を削除します。
linecount=`wc -l < log.txt`
printf はすでに末尾の改行を切り取ります。
$ printf '%s' $(wc -l < log.txt)
詳細:
%s
文字列プレースホルダーの代わりにあなたのコンテンツを印刷します。%s\n
)を印刷するように指示しなければ、印刷されません。Bashで何かの出力を行末なしで出力したい場合は、-n
スイッチを使ってエコーします。
あなたがすでにそれを変数の中に持っているなら、それから 末尾の改行 を切り取ってエコーする:
$ testvar=$(wc -l < log.txt)
$ echo -n $testvar
あるいは、1行で実行することもできます。
$ echo -n $(wc -l < log.txt)