web-dev-qa-db-ja.com

wc -lが、この空でないファイルの行数が0であると通知するのはなぜですか?

xclip/xselは、Ubuntuのシェルに クリップボード出力をパイプする できるユーティリティです。残念ながら、それらはwcコマンドと組み合わせて失敗するようです。

これを試して。新しいファイルを開き、次のように入力します。

this is a line

行末のEnterキーを押すことなく

ここで、このテキストをコピーして、次のことを試してください。

$ xsel -o | wc -l
0

出力は0ですが、実際には1である必要があります。ファイルを保存します(myfile.txtと呼びます)。

今すぐ試してください:

$ cat myfile.txt | wc -l
1

予想通り、出力は1です。

最初のケースで出力が0になるのはなぜですか?

5
CodeBlue

発生している問題は、wc -lが新しい行をカウントすることです。実際には\nを入力していないので、実際には新しい行はありません。

wc man pageからの抜粋

各FILEの改行、ワード、およびバイト数、および複数のFILEが指定されている場合は合計行を印刷します。 FILEがない場合、またはFILEが-の場合は、標準入力を読み取ります。単語は、空白で区切られた長さがゼロではない文字のシーケンスです。

wcが文字をカウントするように切り替えると(-c)、実際には問題なく機能し、文字数をカウントできることがわかります。

$ xsel -o | wc -c
14

ファイルに保存すると、ファイルの最後に改行を追加する効果があります。

5
slm

wcは、行末文字をカウントします。初めてテキストをマークしたとき、行末文字は含まれていません。ファイルを保存すると、エディターはwcによってカウントされる行末文字を追加します。

0
Marco