
나는 갖고 싶다실시간 미리보기필터링된 일반 텍스트 줄. 여러 필터를 배타적으로 또는 포괄적으로 적용해야 하는 것이 중요합니다(다음의 필터와 유사).프로세스 모니터). 필터링이 준비되면 결과를 내보내고 싶습니다.
비슷한 결과를 얻을 수 있지만 grep "filter1\|filter2\|filter3
일부 grep에는 버그가 있어서 이런 종류의 필터를 유지하기가 어렵습니다. 필터가 많이 있습니다. 실시간 미리보기도 쉽게 얻을 수 없습니다. | head
몇 줄밖에 되지 않고 | less
텍스트 검색을 할 수 있는 위치에서 결과를 저장할 수 있는지 확실하지 않기 때문입니다. (또한 명령줄을 좋아하더라도 파이프라인을 사용하는 것은 약간 불편합니다.)
다른 사용자 경험을 위해서는 좀 더 시각적인 것을 사용할 수 있습니다(최소한을 선호하지만).
답변1
내가 널 위해 만든 걸 봐봐, 귀여운 낙사 :)
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.)