通常は標準出力の末尾に改行文字が付いていて都合が良いのですが、時には不要だと思うことがあります。
例えば、一行のみしか返さないと分かっているコマンドをクリップボードなどに確保するとき。
$ find . -name sagashimono.txt | head -n 1 | pbcopy
とすると、Mac OS X の pbcopy
コマンドにより、現在のディレクトリからの sagashimono.txt
のパスがクリップボードに格納されます。Windows では clip
、X.org 環境では xclip
などが同様のコマンドです。
とはいえ、find
コマンドには各行の最後に当然ながら改行文字が付いていて、クリップボードに格納される文字にも末尾に改行文字が付いています。ターミナル内で扱う場合は改行文字は空白類文字の一つとしてほどよく無視されるので気にならないのですが、クリップボードに格納するときには除去して欲しい時もあります。コピーした「一行のデータ」に改行文字が入っていると、一行を入力するためのインプットボックスへペーストを行った場合におかしな挙動になったりすることもあります。
このような、標準出力の末尾の改行があれば除去するというコマンドは存在するのかもしれませんが、例えば多くの環境にプリインストールされている Perl でコンパクトに書くことができます。
chomp
#!/usr/bin/perl
use strict;
use warnings;
while (<>) {
chomp if eof;
print;
}
上記のような Perl プログラムを実行権限付きでパスの通った場所に保存しておくことで、これをパイプでつなぐことで末尾の改行があればそれを除去することができます。
$ find . -name sagashimono.txt | head -n 1 | chomp | pbcopy