实时预览线条是否通过一堆过滤器进行过滤?

实时预览线条是否通过一堆过滤器进行过滤?

我想要一个实时预览过滤纯文本行。重要的是,需要以排他或包容的方式应用多个过滤器(类似于进程监视器)。过滤完成后,我希望能够导出结果。

我可以用类似方法实现grep "filter1\|filter2\|filter3,但我的一些 grep 有缺陷,而且很难维护这种过滤器,因为过滤器太多了。实时预览也不容易实现,因为| head只有几行,而且| less我可以在其中进行文本搜索,但我不确定是否可以保存结果。(此外,管道有点不方便,即使我喜欢命令行。)

为了获得不同的用户体验,我可以使用一些更直观的东西(尽管更喜欢极简主义)。

答案1

看看我为你做了什么,可爱的小纳克萨:)

在 /proc/cpuinfo 上运行

以上是python3 live-line-filter.py /proc/cpuinfo使用您在上面的屏幕截图中看到的过滤器运行的结果。

从 stdin 读取数据会很好,但这很难,因为 Qt 似乎不支持它。我想你可以用普通的 Python 来做,在另一个线程中运行 Qt 应用程序,并让 Qt 监听套接字(并从 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.)

相关内容