Verwenden Sie diese:
grep -A1 -B1 "test_pattern" file
erzeugt eine Zeile vor und nach dem übereinstimmenden Muster in der Datei. Gibt es eine Möglichkeit, nicht Zeilen, sondern eine bestimmte Anzahl von Zeichen anzuzeigen?
Die Zeilen in meiner Datei sind ziemlich groß, daher bin ich nicht daran interessiert, die gesamte Zeile zu drucken, sondern beobachte die Übereinstimmung nur im Kontext. Irgendwelche Vorschläge dazu?
Antworten:
3 Zeichen vor und 4 Zeichen nach
quelle
brew install homebrew/dupes/grep
und führen Sie es als ausggrep
.Dies entspricht bis zu 5 Zeichen vor und nach Ihrem Muster. Der Schalter -o weist grep an, nur die Übereinstimmung anzuzeigen, und -E, einen erweiterten regulären Ausdruck zu verwenden. Stellen Sie sicher, dass die Anführungszeichen um Ihren Ausdruck stehen, da dies sonst von der Shell interpretiert werden kann.
quelle
{0,255}
funktioniert{0,256}
gibtgrep: invalid repetition count(s)
Du könntest benutzen
quelle
Du meinst so:
?
Das druckt bis zu zwanzig Zeichen auf jeder Seite von
test_pattern
. Die\{0,20\}
Notation ist wie*
, gibt jedoch null bis zwanzig Wiederholungen anstelle von null oder mehr an. Das-o
sagt, dass nur die Übereinstimmung selbst und nicht die gesamte Zeile angezeigt werden soll.quelle
grep: Invalid content of \{\}
Mit
gawk
können Sie die Übereinstimmungsfunktion verwenden:Wenn Sie mit
perl
einer flexibleren Lösung einverstanden sind: Im Folgenden werden drei Zeichen vor dem Muster gefolgt vom tatsächlichen Muster und dann fünf Zeichen nach dem Muster gedruckt.Dies kann auch auf Wörter anstatt nur auf Zeichen angewendet werden. Beim Folgen wird ein Wort vor der tatsächlich übereinstimmenden Zeichenfolge gedruckt.
Im Folgenden wird ein Wort nach dem Muster gedruckt:
Im Folgenden wird ein Wort vor dem Muster, dann das eigentliche Wort und dann ein Wort nach dem Muster gedruckt:
quelle
Sie können regexp grep zum Suchen und + second grep zum Hervorheben verwenden
23_string_and
quelle
Ich werde mich nie leicht an diese kryptischen Befehlsmodifikatoren erinnern, also habe ich die oberste Antwort genommen und sie in eine Funktion in meiner
~/.bashrc
Datei umgewandelt:So sieht es in Aktion aus:
Bei der fraglichen Datei handelt es sich um eine durchgehende 25-KByte-Zeile, und es ist hoffnungslos, mit regulärer Datei das zu finden, wonach Sie suchen
grep
.Beachten Sie die zwei verschiedenen Möglichkeiten, wie Sie
cgrep
diese Parallelenmethode aufrufen könnengrep
.Es gibt eine "raffiniertere" Möglichkeit, die Funktion zu erstellen, bei der "$ 2" nur übergeben wird, wenn sie gesetzt ist, wodurch 4 Codezeilen gespeichert werden. Ich habe es aber nicht zur Hand. So etwas wie
${parm2} $parm2
. Wenn ich es finde, werde ich die Funktion und diese Antwort überarbeiten.quelle