【コラム】

OS X ハッキング!

106 ペーストボードの賢い操縦法

    海上忍  [2004/09/13]

    近所のコンビニで買い物をしていたら、なぜか雪見だいふくに目がとまった。足をレジへ運ぶと、今度はレジ横にホカホカの中華まんを発見。話は唐突に変わりますが、アップルストアのレジに使われているiMac G4、いずれiMac G5に交代するんですかね? どうなんでしょう?

    さて、今回はPantherで追加されたコマンド「pbpaste」と「pbcopy」によるペーストボードの操縦方法を紹介してみよう。単独ではそれほど大した機能を持たないが、パイプ経由で他のコマンドと組み合わせれば、かなり使えるコマンドとなること請け合いだ。

    pbpasteとpbcopyの仕組み

    OS Xでは、アプリケーション間のコピー/カット/ペーストには「ペーストボード」が利用される。サーバプロセス(/System/Library/CoreServices/pbs)はシステムのバックグラウンドで常に稼働し、このサーバと通信可能なアプリケーション間でのデータのやり取りを仲介する仕組みだ。ちなみに、ペーストボードという呼称はクラス名(NSPasteBoard)に由来するもので、クリップボードの別名と考えていい。

    pbpasteとpbcopyは、ペーストボードサーバの機能を利用するためのコマンドだ。通常はオプションや引数を指定する必要はなく、コマンド名だけを入力して実行すると、pbpasteの場合はペーストボードに貯えられたデータが標準出力へと、pbcopyの場合は標準入力から取り込んだデータがペーストボードへと貯えられるので、パイプやリダイレクトを併用してデータをやり取りする。なお、スクリーンショットなど画像データ(PostScriptを除く)を扱えない点には注意が必要だ。

    回文の怪文書をつくる

    まずは小手調べに、簡単に試せるものを紹介してみよう。適当なアプリケーションで文字列(ASCIIキャラクタ)をコピーしたあと、タスクをTerminalに切り替えて「pbpaste | rev」と実行してほしい。すると、回文のように文字列が逆転して出力されるはずだ。

    なお、OS Xに収録されているrevコマンドはマルチバイト文字に対応しないため、日本語の文章がペーストボードにある状態では文字化けを起こす。「たいやきやいた」とか「たしかにかした」といった日本語の回文は変換できないので、念のため。

    A Santa lived as a devil at NASA. ←この文字列をコピー
    $ pbpaste | rev
    .ASAN ta lived a sa devil atnaS A ←ペーストボード上の文字列が逆転した

    スペースをタブと入れ替える

    Excelなどの表計算ソフトでは、セルを区切る記号として「タブ」を使うことが一般的。そのため、区切り記号がスペースの表をワークシートに貼り付けると、行全体が1つのセルとなり表の体裁が大きく崩れてしまう。

    もしこのような事態に陥った場合には、慌ててデータを修正する前に、体裁が崩れてしまったワークシート上の表をコピーしてから以下のコマンドラインを実行してみよう。unexpandコマンドの働きにより連続したスペースは1つのタブに変換され、その結果はpbcopyコマンドによりペーストボードに貯えられるため、もう一度ペーストし直せば表は元通りになるはずだ。

    $ pbpaste | unexpand -a | pbcopy ←ペーストボードの内容の連続したスペースをすべてタブに置き換え、ペーストボードに戻す

    特定のキャラクタを置換する

    コンピュータに慣れてくると、日付や金額だけを入れ替えて文書を再利用することが多くなる。その作業は単純だが、疲れているときに行うと、書き換えるべきデータを見落としてしまうことも。対象が請求書や見積書だったとしたら… 想像するだに恐ろしい。

    そんなときには、trコマンドに文字クラスとして「digit」を指定し、数値部分を「*」などのダミーの文字に置換するといい。とりあえず以前の数値を消せるので、前述したようなミスを防ぐことができる。trコマンドでは、もっと高度な文字列の指定も可能なので、興味があれば調べてみよう。

    $ pbpaste | tr [:digit:] '*' | pbcopy ←ペーストボードの内容の数値部分をすべて「*」に置き換え、ペーストボードに戻す

    trコマンドで使用できる文字クラス

    alnum文字と数字
    alpha文字
    cntrlコントロール文字
    digit数字
    graph印刷可能な文字(スペースは含まず)
    lower小文字
    print印刷可能な文字(スペースを含む)
    punct記号
    spaceスペース
    upper大文字
    xdigit16進数の文字

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン