필터 스택으로 필터링된 실시간 미리보기 라인이 있습니까?

필터 스택으로 필터링된 실시간 미리보기 라인이 있습니까?

나는 갖고 싶다실시간 미리보기필터링된 일반 텍스트 줄. 여러 필터를 배타적으로 또는 포괄적으로 적용해야 하는 것이 중요합니다(다음의 필터와 유사).프로세스 모니터). 필터링이 준비되면 결과를 내보내고 싶습니다.

비슷한 결과를 얻을 수 있지만 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(필수)를 얻을 수 있습니다.

라이브라인-filter.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.)

관련 정보