Existe-t-il un outil de filter interactif lors de la sortie de la pagination?

Je voudrais prendre la sortie d'un programme et filterr de façon interactive les lignes à canaliser à la command suivante.

ls | interactive-filter | xargs rm 

Par exemple, j'ai une list de files sur laquelle un model ne peut pas correspondre pour réduire. Je voudrais une command interactive-filter qui va page la sortie de la list des files et je pourrais indiquer interactivement quelles lignes à transmettre à la prochaine command. Dans ce cas, chaque ligne serait alors supprimée.

  1. iselect fournit une list déroulante (en input d'un canal précédent) dans laquelle l'user peut marquer plusieurs inputs (en sortie du canal suivant):

     # 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 

    Sortie (après avoir marqué quelques-uns sur mon système):

     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 permet d'éditer de manière interactive (avec son éditeur de text favori) ce qui passe par un tuyau. Exemple:

     # 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 

    Sortie (après avoir supprimé certaines lignes dans 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 

Note sur push & pull: iselect commence par une list dans laquelle rien n'est sélectionné. vipe commence par une list dans laquelle chaque élément affiché sera envoyé via le canal, à less que l'user ne le supprime.

Dans les dissortingbutions Debian , les deux utils peuvent être installés avec apt-get install moreutils iselect .

Vous pouvez écrire vipe dans quelques lignes de shell. Une preuve de concept rapide et sale qui fonctionne pour moi:

 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.$$ } 

Source ceci dans votre coquille et il est là. Le but du if est de supprimer la génération de la sortie si l'éditeur (ou tenter d'exécuter l'éditeur) échoue.