Perl

出力の最後の改行が不要な場合のフィルタコマンド

More than 1 year has passed since last update.

通常は標準出力の末尾に改行文字が付いていて都合が良いのですが、時には不要だと思うことがあります。

例えば、一行のみしか返さないと分かっているコマンドをクリップボードなどに確保するとき。

$ 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