ページング出力時にインタラクティブなフィルター ツールはありますか?

ページング出力時にインタラクティブなフィルター ツールはありますか?

プログラムからの出力を取得し、次のコマンドにパイプする行を対話的にフィルタリングしたいと思います。

ls | interactive-filter | xargs rm

たとえば、パターンが一致しないファイルのリストがあり、それを縮小するとします。interactive-filterファイル リストの出力をページングし、次のコマンドに転送する行を対話形式で指定できるコマンドが必要です。この場合、各行が削除されます。

答え1

  1. iselectアップダウン リスト (前のパイプからの入力として) を提供し、ユーザーは複数のエントリをタグ付けできます (次のパイプへの出力として)。

    # show some available executables ending in '*sh*' to run through `whatis`
    find /bin /sbin /usr/bin -maxdepth 1 -type f -executable -name '*sh'   |
    iselect -t "select some executables to run 'whatis' on..." -a -m |
    xargs -d '\n' -r whatis 
    

    スペースバーを押してシステム上のいくつかにタグを付けた後の出力:

    dash (1)             - command interpreter (shell)
    ssh (1)              - OpenSSH SSH client (remote login program)
    mosh (1)             - mobile shell with roaming and intelligent local echo
    yash (1)             - a POSIX-compliant command line shell
    
  2. vipeパイプを通過する内容を(好みのテキストエディタで)対話的に編集できます。例:

    # take a list of executables with long names from `/bin`, edit that
    # list as needed with `mcedit`, and run `wc` on the output.
    find /bin -type f | grep '...............' | EDITOR=mcedit vipe | xargs wc
    

    出力(中にいくつかの行を削除した後mcedit):

       378   2505  67608 /bin/ntfs-3g.secaudit
       334   2250 105136 /bin/lowntfs-3g
       67    952  27152 /bin/nc.traditional
       126    877  47544 /bin/systemd-machine-id-setup
       905   6584 247440 total
    

プッシュとプルに関する注意:

  • iselectリストから始まり、何もないが選択されます。
  • vipeリストから始まり、表示される項目は、ユーザーが削除しない限り、パイプを介して送信されます。

デビアンベースのディストリビューションでは、両方のユーティリティを でインストールできますapt-get install moreutils iselect

答え2

vipeシェルで数行記述できます。私の場合は、簡単に概念実証できました。

EDITOR=vi   # change to preferred editor as needed.

vipe()
{
  cat > .temp.$$
  if $EDITOR .temp.$$ < /dev/tty > /dev/tty 2>&1 ; then
    cat .temp.$$
  fi
  rm .temp.$$
}

これをシェルにソースすると、そこに出力されます。の目的は、ifエディター (またはエディターの実行試行) が失敗した場合に出力の生成を抑制することです。

関連情報