クリップボード操作コマンドを活用してテキストを手軽に一括編集する

はじめに

macOSpbcopy, pbpasteLinuxxsel を使うと、クリップボードにコピーした値を sed などのコマンドで編集後、別のエディタやスプレッドシートにペースト、といった操作が簡単にできて便利という話です。

スクリプトを書くほどでもないけど手で編集するのは面倒だからシェル芸したい!という場合におすすめ。

環境

どちらの環境ともシェルは zsh です。

よくある使用例

macOSの場合

例えばソースコードに記載されたエラーコードを抜き出してスプレッドシートに貼り付けたいとき。

当該部分を Command-C でコピーして…

f:id:ser1zw:20210531212437p:plain

pbpaste で出力した結果から grepsed で目的の部分を取り出す。

$ pbpaste | grep 'ErrorCode' | sed -E 's/[^"]+"([0-9A-Z]+)",?/\1/g'
E0001
E0002
E9999

そのままパイプで pbcopy につなげれば、目的の値がクリップボードにコピーされる。

$ pbpaste | grep 'ErrorCode' | sed -E 's/[^"]+"([0-9A-Z]+)",?/\1/g' | pbcopy

あとはスプレッドシートにそのまま Command-V とかで貼り付ければOK。

f:id:ser1zw:20210531212513p:plain

Linuxの場合

macOSの例で使用した pbcopy , pbpaste をそれぞれ xsel -bi , xsel -bo に置き換えるだけ。

$ xsel -bo | grep 'ErrorCode' | sed -E 's/[^"]+"([0-9A-Z]+)",?/\1/g' | xsel -bi

ただし xsel は標準では入っていないので、事前にインストールが必要。こんな感じ。

$ sudo apt-get install xsel

コマンド説明

macOSの場合

pbcopy : 標準入力の内容をクリップボードにコピーする

下記の例では HOGEクリップボードに登録される。普通にコピーしたときと同じく、Command-V で結果を貼り付け可能。

$ echo HOGE | pbcopy

pbpaste: クリップボードの内容を標準出力に書き出す

前述の例でクリップボードに登録された HOGE が標準出力に表示される。

$ pbpaste
HOGE

Linuxの場合

xsel: 選択範囲を操作する

xselX Window System上で選択された部分を操作するコマンド。オプション -b または --clipboard をつけることで、クリップボードの操作ができる。 入力と出力の切り替えはオプション -i -o で行う。

xsel -bi: 標準入力の内容をクリップボードにコピーする

入力は -i オプションで行う。クリップボードのオプションとまとめて -bi で指定。

下記の例ではMacでの例と同じく、標準入力から受け取った HOGEクリップボードに登録される。こちらも Ctrl-V で結果を貼り付け可能。

$ echo HOGE | xsel -bi

-i オプションは省略してもOK。

$ echo HOGE | xsel -b

xsel -bo: クリップボードの内容を標準出力に書き出す

出力は -o オプション。 前述の例でクリップボードに登録された HOGE が標準出力に表示される。

$ xsel -bo
HOGE

ちなみにLinuxには xclip というコマンドもある

xsel と同じく、デフォルトでの操作対象は選択部分。-selection cクリップボードの操作になる。

$ echo HOGE | xclip -selection c
$ xclip -selection c -o
HOGE

xclip は画像などのバイナリデータを扱えたり、パイプを経由せず直接ファイルから入力ができたりと、 xsel より便利な機能もある。

$ xclip -selection c -t image/jpeg foo.jpg # 画像ファイルをクリップボードにコピー
$ xclip -selection c -o > bar.jpg # クリップボード内の画像データをファイルに出力

ただ、クリップボードを指定するためのオプションが -selection c と少し長いので、普段はやっぱり xsel を使ってしまう…。

参考