catコマンドは各行の末尾に余分な$文字を追加しているようです

catコマンドは各行の末尾に余分な$文字を追加しているようです

ファイルを作成しようとしているのですが、viエディターが各行の末尾に を追加しているようです。この原因や、これを$防ぐ方法がわかりません。vi

vi file.txt
12345
abcde

cat -v -e file.txt
12345$
abcde$

wc file.txt
2 2 12

これらの記号は末尾に置きたくないです$。文字数に依存する自動化ファイルが壊れてしまいます。各行に 5 文字あるのに、なぜ単語数に 12 文字と表示されるのでしょうか?

VIM バージョン 7.4.629

答え1

@steeldriver のコメントは正しいです:cat行末を表示します$( vi「:set list」を使用して丁寧に尋ねればそうするかもしれません)。行ごとの追加文字は改行 (テキストの各行の末尾にある非表示の文字) です。

カウントだけを知りたい場合は印刷可能wcテキストの場合は、 で処理する前に、たとえば をオプションtrとともに使用して、ファイルをフィルタリングすることができます-d。以下は、 を例としてカウントするスクリプトです。

#!/bin/sh
cat $0 |wc
cat $0 | tr -d '\r\n\t' | wc
cat $0 | tr -d '[:cntrl:]' |wc

ただし、最後の行は、おそらくあなたの用途には移植性に欠けるでしょう(POSIX、 の中に延長セクションを参照してください。ただし、根拠の手がかりに基づくと、使用する可能性のあるものであれば何でも実行できます。

関連情報