フィルターのスタックでフィルターされたライブプレビュー ラインですか?

フィルターのスタックでフィルターされたライブプレビュー ラインですか?

私はライブプレビューフィルタリングされたプレーンテキスト行のフィルタです。複数のフィルタを排他的または包括的に適用する必要があることが重要です(プロセスモニター)。フィルタリングの準備ができたら、結果をエクスポートできるようにしたいと思います。

同様のことはできますgrep "filter1\|filter2\|filter3が、私の grep の一部にはバグがあり、この種のフィルターを維持するのは困難です。フィルターは多数あります。ライブ プレビューも簡単には実現できません。| head数行しかなく、| lessテキスト検索を実行できる場所では、結果を保存できるかどうかわかりません。(また、コマンド ラインが好きでも、パイプラインでは少し不便です。)

異なるユーザー エクスペリエンスを実現するには、より視覚的なもの (ただし、最小限のものが好ましい) を使用することもできます。

答え1

私があなたのために作ったものを見て、かわいいナクサ :)

/proc/cpuinfo で実行中

python3 live-line-filter.py /proc/cpuinfo上記は、上のスクリーンショットに表示されているフィルターを使用して実行した結果です。

stdin から読み込めたらいいのですが、Qt がそれをサポートしていないようなので難しいです。プレーンな Python でそれを実行し、Qt アプリを別のスレッドで実行し、Qt にソケットを listen させて (そして Python メイン スレッドからフィードして) みればよいと思います... ちょっとした改善のために手間がかかりすぎます。ライブ フィルターを試したい場合は、すでにデータがあると思います。

Ubuntu では、python3-pyqt4 をインストールして PyQt (必須) を入手できます。

ライブラインフィルター.py:

from PyQt4 import Qt
import sys
import fileinput
import re

class LiveLineFilterApplication(Qt.QApplication):

    def __init__(self, args):
        Qt.QApplication.__init__(self, args)
        self.addWidgets()

        self.unfilteredlines = [x for x in fileinput.input()]

        self.slotRefilter()

        self.exec_()

    def addWidgets(self):
        self.w = Qt.QWidget()
        self.layout = Qt.QVBoxLayout(self.w)

        self.input = Qt.QTextEdit(".*", None)
        self.input.textChanged.connect(self.slotRefilter)

        self.textedit = Qt.QTextEdit("pending", None)
        self.textedit.setReadOnly(True)

        self.layout.addWidget(self.input)
        self.layout.addWidget(self.textedit)
        self.w.show()

    def slotRefilter(self):
        filters = self.input.toPlainText().strip()
        matches = self.unfilteredlines
        for filt in filters.split("\n"):
          if filt == "": continue
          r = re.compile(filt)
          matches = [x for x in matches if r.search(x)]
        self.textedit.setText("".join(matches))

if __name__ == "__main__":
    app = LiveLineFilterApplication(sys.argv)

代替案:

答え2

ソフトウェアのリクエストはここでは話題になりません。ただし、回避策として、grep の-fフラグを使用できます。

   -f FILE, --file=FILE
          Obtain patterns from FILE, one per line.   The
          empty   file   contains   zero  patterns,  and
          therefore matches nothing.  (-f  is  specified
          by POSIX.)

関連情報