
私はライブプレビューフィルタリングされたプレーンテキスト行のフィルタです。複数のフィルタを排他的または包括的に適用する必要があることが重要です(プロセスモニター)。フィルタリングの準備ができたら、結果をエクスポートできるようにしたいと思います。
同様のことはできますgrep "filter1\|filter2\|filter3
が、私の grep の一部にはバグがあり、この種のフィルターを維持するのは困難です。フィルターは多数あります。ライブ プレビューも簡単には実現できません。| head
数行しかなく、| less
テキスト検索を実行できる場所では、結果を保存できるかどうかわかりません。(また、コマンド ラインが好きでも、パイプラインでは少し不便です。)
異なるユーザー エクスペリエンスを実現するには、より視覚的なもの (ただし、最小限のものが好ましい) を使用することもできます。
答え1
私があなたのために作ったものを見て、かわいいナクサ :)
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.)