Command-Line

分頁輸出時是否有互動式過濾工具?

  • April 12, 2018

我想從程序中獲取輸出並以互動方式過濾將哪些行傳遞給下一個命令。

ls | interactive-filter | xargs rm

例如,我有一個模式無法匹配以減少的文件列表。我想要一個命令interactive-filter來分頁文件列表的輸出,並且我可以互動地指示將哪些行轉發到下一個命令。在這種情況下,每一行都將被刪除。

  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
  1. 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從一個列表開始,其中顯示的每個項目都將通過管道發送,除非使用者將其刪除。

在基於Debian的發行版中,兩個 utils 都可以使用apt-get install moreutils iselect.

引用自:https://unix.stackexchange.com/questions/313677