
Gibt es einen Befehl, der einen bestimmten Ausdruck im Text hervorhebt?
Ich suche nach etwas wie der Suchfunktion in Less, aber mit normaler Textausgabe auf stdout statt im less
Viewer.
Beispiel:
$ cat test.txt | highlight "an"
Perspektiven füreingeordneter NATO-Abzug aus Afghanistaneinisteinerlitt zwei Rückschläge, als Präsident Hamid Karzai demeinbegrenzte Truppenstärke der USAeind die TalibeinFriedensgespräche gestoppt.
Der angegebene reguläre Ausdruck kann durch Farbe oder andere Mittel hervorgehoben werden.
Antwort1
Ich bin nicht sicher, ob dies auf eine Funktion oder nur auf einen versteckten Nebeneffekt zurückzuführen ist, aber dies funktioniert in GNU grep
2.11:
grep --color 'an\|' test.txt
Antwort2
ackhat eine --passthru
Option, die dies tut:
ack --passthru an test.txt
some_command | ack --passthru an -
Antwort3
Sie können dieses Skript von mir ausprobieren. Sie können entweder eine Datei angeben oder es nimmt Standardeingaben entgegen. Sie können einen regulären Python-Ausdruck für den Text definieren, den Sie hervorheben möchten. Hervorgehobener Text ist standardmäßig neongrün (hey, ich verwende einen schwarzen Hintergrund!). Sie können jedoch dieANSI-Farbcode.
#!/usr/bin/env python
import sys
import re
def highlight_text(text,pat):
def replacement_funk(matchobj): return '\x1b[42m%s\x1b[0m'%matchobj.group(0)
return re.sub(pat,replacement_funk,text)
if __name__ == '__main__':
if len(sys.argv) == 2:
input = sys.stdin
pat = sys.argv[1]
elif len(sys.argv) == 3:
input = open(sys.argv[2])
pat = sys.argv[1]
else:
sys.stderr.write("colorme pattern [inputfile]")
text = input.read()
print highlight_text(text,pat)
Hier isteinBeispiel.
blessburn@blessburn:/tmp$ cat test.txt | ./colorme.py an
Perspektiven füreingeordneter NATO-Abzug aus Afghanistaneinisteinerlitt zwei Rückschläge, als Präsident Hamid Karzai demeinbegrenzte Truppenstärke der USAeind die TalibeinFriedensgespräche gestoppt.
blessburn@blessburn:/tmp$ ./colorme.py '(Af.*? |NA[\w]{2})' test.txt
Aussichten auf eine geordneteNATORückzug ausAfghanistanerlitt zwei Rückschläge, als Präsident Hamid Karzai eine Begrenzung der US-Truppen forderte und die Taliban die Friedensgespräche stoppten.
Antwort4
$cat test.txt | grep --colour=auto -C 100000 an
"color" funktioniert auch. Sie können auch einen Alias definieren, damit grep immer die Option verwendet:
alias grep='grep --colour=auto -C 100000'
Fügen Sie das Obige irgendwo in /etc/profile.d/ oder Ihre .bashrc-Datei oder was auch immer ein.