2つのコマンドをパイプで繋いだときのパイプバッファをエディタで編集する方法
はじめに
以前 コマンド実行結果を Vim や Visual Studio Code で開く方法 というエントリで、あるコマンドの実行結果をエディタにわたすための方法を紹介しました。
今回はそれに関連したエントリです。
Linux には、「あるコマンドの ( 標準 ) 出力」を「別のコマンドの ( 標準 ) 入力」として渡すための方法として 「パイプ」 が用意されています。
例えば、 seq
コマンドの実行結果を 2 行だけ抽出したい場合には、 head
コマンドをパイプ (|
)でつないで実行してやります。
# 1から5まで5行出力
$ seq 5
1
2
3
4
5
# seq 5 の実行結果から先頭2行を出力
$ seq 5 | head -n 2
1
2
ここで seq 5
の実行結果が、 head -n 2
に渡る前にエディタで加工する方法があります。
検証環境
$ uname -moi
x86_64 x86_64 GNU/Linux
$ head -n 2 /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
$ bash -version | head -n 1
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
vipe
コマンドでパイプバッファをエディタで編集する
パイプバッファをエディタで編集するツールとして、 vipe
というツールがあります。
標準ではインストールされていませんので、自分でインストールする必要があります。
# RedHat系OSの場合
$ yum install -y moreutils
# macOSの場合
$ brew install moreutils
それでは編集してみます。
改めて、 seq
コマンドの実行結果を head
に渡し絞り込んでみます。
# 1から5まで5行出力
$ seq 5
1
2
3
4
5
# seq 5 の実行結果から先頭2行を出力
$ seq 5 | head -n 2
1
2
今度は vipe
コマンドを使って、 seq
コマンドと head
コマンドのデータのやり取りの途中で、パイプバッファをエディタで編集してみます。
# vipe コマンドを間に挟む
$ seq 5 | vipe | head -n 2
使い方は vipe
コマンドをパイプとパイプの間に挟んでやります。
実行すると以下のようにエディタが起動します。
エディタには、 vipe
コマンドへの標準入力、つまり seq 5
の実行結果が表示されているはずです。
僕の環境では vi
が起動していますが、こちらは EDITOR
環境変数を参照しているため、任意のエディタが設定可能です。
( export EDITOR=code
も試しては見ましたが、VSCode が起動することは起動しますがパイプバッファの編集がうまくできませんでした。 )
今回はエディタで以下のような内容になるように編集し、 :wq
で保存+終了してみます。
1
3
5
コマンド実行結果がコンソールに出力されます。
$ seq 5 | vipe | head -n 2
1
3
vipe
で保存した結果を head -n 2
した結果、先頭 2 行だけが出力されました。
ひとこと
せっかくですが、あんまり使用することはないでしょうね。
fzf -m
を使って、標準入力から任意行をいくつか選択したり、絞り込んだりすることはよくありますけどね。
$ seq 10 | fzf -m | awk '{ sum+=$1 } END { print sum }'
$ seq 10 | fzf -m | awk '{ sum+=$1 } END { print sum }'
9
ディスカッション
コメント一覧
まだ、コメントがありません