クリップボード操作コマンドを活用してテキストを手軽に一括編集する
はじめに
macOSの pbcopy
, pbpaste
やLinuxの xsel
を使うと、クリップボードにコピーした値を sed
などのコマンドで編集後、別のエディタやスプレッドシートにペースト、といった操作が簡単にできて便利という話です。
スクリプトを書くほどでもないけど手で編集するのは面倒だからシェル芸したい!という場合におすすめ。
環境
どちらの環境ともシェルは zsh です。
よくある使用例
macOSの場合
例えばソースコードに記載されたエラーコードを抜き出してスプレッドシートに貼り付けたいとき。
当該部分を Command-C
でコピーして…
pbpaste
で出力した結果から grep
や sed
で目的の部分を取り出す。
$ 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。
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
: 選択範囲を操作する
xsel
はX 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
を使ってしまう…。