LoginSignup
0
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-05-08

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

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

$ 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
0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1