Percol | percol の基本操作
概要
Percol はPython製のインタラクティブな grep ツールです。
同種のツールとして以下があります。
name | impl lang | github url |
---|---|---|
canything | C | https://github.com/keiji0/canything |
zaw | Shell | https://github.com/zsh-users/zaw |
peco | Go | https://github.com/peco/peco |
fzf | Ruby | https://github.com/junegunn/fzf |
利用例
利用例1:単一ファイル内のテキスト検索
銀行コードと銀行名のリストを絞り込んでみます。
banks.txt
0001|みずほ銀行
0005|三菱東京UFJ銀行
0009|三井住友銀行
0010|りそな銀行
0017|埼玉りそな銀行
0033|ジャパンネット銀行
0034|セブン銀行
0035|ソニー銀行
0036|楽天銀行
0038|住信SBIネット銀行
0039|じぶん銀行
0040|イオン銀行
0041|大和ネクスト銀行
0116|北海道銀行
0117|青森銀行
0118|みちのく銀行
0119|秋田銀行
0120|北都銀行
0121|荘内銀行
0122|山形銀行
0123|岩手銀行
0124|東北銀行
0125|七十七銀行
0126|東邦銀行
0128|群馬銀行
0129|足利銀行
0130|常陽銀行
0131|筑波銀行
0133|武蔵野銀行
0134|千葉銀行
0135|千葉興業銀行
0137|東京都民銀行
0138|横浜銀行
0140|第四銀行
0141|北越銀行
0142|山梨中央銀行
0143|八十二銀行
0144|北陸銀行
0145|富山銀行
0146|北國銀行
0147|福井銀行
0149|静岡銀行
0150|スルガ銀行
0151|清水銀行
0152|大垣共立銀行
0153|十六銀行
0154|三重銀行
0155|百五銀行
0157|滋賀銀行
0158|京都銀行
0159|近畿大阪銀行
0161|池田泉州銀行
0162|南都銀行
0163|紀陽銀行
0164|但馬銀行
0166|鳥取銀行
0167|山陰合同銀行
0168|中国銀行
0169|広島銀行
0170|山口銀行
0172|阿波銀行
0173|百十四銀行
0174|伊予銀行
0175|四国銀行
0177|福岡銀行
0178|筑邦銀行
0179|佐賀銀行
0180|十八銀行
0181|親和銀行
0182|肥後銀行
0183|大分銀行
0184|宮崎銀行
0185|鹿児島銀行
0187|琉球銀行
0188|沖縄銀行
0190|西日本シティ銀行
0191|北九州銀行
0288|三菱UFJ信託銀行
0289|みずほ信託銀行
0294|三井住友信託銀行
0297|日本マスタートラスト信託銀行
0304|野村信託銀行
0307|オリックス銀行
0322|新銀行東京
0324|日本トラスティサービス信託銀行
0325|資産管理サービス信託銀行
0397|新生銀行
0398|あおぞら銀行
0401|シティバンク銀行
0402|ジェーピーモルガン銀行
0403|アメリカ銀行
0411|香港上海銀行
0430|ドイツ銀行
0472|SBJ銀行
0501|北洋銀行
0508|きらやか銀行
0509|北日本銀行
0512|仙台銀行
0513|福島銀行
0514|大東銀行
0516|東和銀行
0517|栃木銀行
0522|京葉銀行
0525|東日本銀行
0526|東京スター銀行
0530|神奈川銀行
0532|大光銀行
0533|長野銀行
0534|富山第一銀行
0537|福邦銀行
0538|静岡中央銀行
0542|愛知銀行
0543|名古屋銀行
0544|中京銀行
0546|第三銀行
0554|関西アーバン銀行
0555|大正銀行
0562|みなと銀行
0565|島根銀行
0566|トマト銀行
0569|もみじ銀行
0570|西京銀行
0572|徳島銀行
0573|香川銀行
0576|愛媛銀行
0578|高知銀行
0582|福岡中央銀行
0583|佐賀共栄銀行
0585|長崎銀行
0587|熊本銀行
0590|豊和銀行
0591|宮崎太陽銀行
0594|南日本銀行
0596|沖縄海邦銀行
0597|八千代銀行
- 三菱東京UFJ銀行を絞り込む
絞り込まれていく様子。
$ percol banks.txt
QUERY> 三 (1/6) [1/1]
0005|三菱東京UFJ銀行
0009|三井住友銀行
0154|三重銀行
0288|三菱UFJ信託銀行
0294|三井住友信託銀行
0546|第三銀行
QUERY> 三菱 (1/2) [1/1]
0005|三菱東京UFJ銀行
288|三菱UFJ信託銀行
QUERY> 三菱東京 (1/1) [1/1]
0005|三菱東京UFJ銀行
- 絞り込み+カーソル移動で三井住友銀行を選択する
三を入力後、2番目にデータがあるので下カーソルを一回入力後、Enterで三井住友銀行が標準出力されます
$ percol banks.txt
QUERY> 三 (1/6) [1/1]
0005|三菱東京UFJ銀行
0009|三井住友銀行
0154|三重銀行
0288|三菱UFJ信託銀行
0294|三井住友信託銀行
0546|第三銀行
$ percol banks.txt
0009|三井住友銀行
利用例2:複数のコマンドとパイプを利用する
自作 gem tudu の .rb ファイルから version.rb を選択し、 cat で表示する
- 絞り込み前
$ find . -name "*.rb" | percol | xargs cat -n
QUERY> (1/12)[1/1]
./lib/task.rb
./lib/tasks.rb
./lib/tudu/version.rb
./lib/tudu_core.rb
./lib/tudu_dsl.rb
./lib/tudu_file_keys.rb
./lib/tudu_paths.rb
./lib/tudu_templates.rb
./spec/spec_helper.rb
./spec/tasks_spec.rb
./spec/tudu_core_spec.rb
./spec/tudu_dsl_spec.rb
- v で絞り込み
QUERY>
v (1/1)[1/1]
./lib/tudu/version.rb
- 絞り込めたのでEnterを押下して結果を表示
$ find . -name "*.rb" | percol | xargs cat -n
1 # encoding: utf-8
2 # =TodoManage Module
3 module Tudu
4 VERSION = '0.0.5'
5 end
利用例3:複数要素を選択
自作 gem tudu の .rb ファイルから *_spec.rb に一致するファイルを全て選択し、 cat で表示する
- 絞り込み前
$ find . -name "*.rb" | percol | wc
QUERY> (1/12)[1/1]
./lib/task.rb
./lib/tasks.rb
./lib/tudu/version.rb
./lib/tudu_core.rb
./lib/tudu_dsl.rb
./lib/tudu_file_keys.rb
./lib/tudu_paths.rb
./lib/tudu_templates.rb
./spec/spec_helper.rb
./spec/tasks_spec.rb
./spec/tudu_core_spec.rb
./spec/tudu_dsl_spec.rb
- spec. で絞り込み
QUERY>
spec. (1/3)[1/1]
./spec/tasks_spec.rb
./spec/tudu_core_spec.rb
./spec/tudu_dsl_spec.rb
-
Ctrl+Space で必要なファイルを選択します(今回は全て)
-
3件の絞り込み結果に対して、
wc
を実行した結果が表示されます
$ find . -name "*.rb" | percol | wc
3 3 70
補足
実際にCUIで1文字入力するたびに、結果のフィルタリングがモリモリ動く様子は
percol の GitHub の README にあるアニメーションGIFをご確認ください。
https://github.com/mooz/percol
参照
-
percol GitHub
https://github.com/mooz/percol -
tudu GitHub
https://github.com/tbpgr/tudu