20 Zeichen nach und vor dem Match zu springen

14

Ich habe das Problem, dass ich nach dem Spiel zu viele Informationen bekomme

grep -RnisI --color=auto "pseudomonas" *

Ich möchte nach und vor dem Spiel nur 20 Zeichen oder 10 Wörter erhalten.

Was ist das richtige Werkzeug, um so etwas zu tun?

Léo Léopold Hertz 준영
quelle
1
Ihre Optionen sind etwas seltsam, wenn Sie sich über zu viele Informationen beschweren. Sie möchten eine Zeile nach und vor Ihrem Spiel angezeigt ( -A1und -B1verantw.), Aber es ist zu viel? Wo genau soll die Ausgabe abgeschnitten werden?
Andreas Wiese
1
Können Sie eine Beispieleingabe und die erwartete Ausgabe angeben?
Ramesh
Ich habe den Befehl geändert und in Ubuntu 13.10 getestet. Lassen Sie mich wissen, ob er für Sie funktioniert. Ich habe eine grep-Option und eine egrep-Option
Eric
Siehe auch Kontext des passenden regulären Ausdrucks
Stéphane Chazelas

Antworten:

23
cat file.txt | grep -o -P '.{0,20}string.{0,20}'

Dies sollte es für Sie tun

Aktualisieren:

Wenn Sie keine Katze wollen, können Sie einfach das grep mit der Datei als Parameter verwenden:

grep -o -P '.{0,20}pseudomonas.{0,20}' FileName.html

Außerdem verwendet The -P Perl Regex, das laut Manpage experimentell ist. Wenn Sie dieses Flag vermeiden möchten, können Sie stattdessen einfach egrep verwenden:

grep -Eo '.{0,20}yourstring.{0,20}' yourtestfile.txt
Eric
quelle
Was für eine hässliche Testdatei, die Sie haben;)
Ouki
Der Rest der Datei ist wirklich nützlich, das ist Teil eines mehrzeiligen Kommentars in der Mitte eines Schemas, der ausgeschlossen werden musste, ohne unseren Parser zu unterbrechen. Es war nur eine gute Zeile, um es zu versuchen.
Eric
Da es eine meiner Dateien ist, die auf 755 gesetzt ist, aber ich sehe, dass cat für eine HTML-Datei möglicherweise nicht ideal ist, können Sie versuchen, den Dateinamen als Parameter an grep zu übergeben.
Eric
Ich meine mit 777 Dateien, dass Sie 777 Kopien verschiedener Dateien haben, nicht die übliche Sache. Ich führe $$$ egrep -o '. {0,20} pseudomonas. {0,20}' * $$$ aus. Der Befehl bleibt dort unendlich und tut nichts. Dies scheint dann wieder zu funktionieren $$$ egrep -ori '. {0,20} pseudomonas. {0,20}' * $$$. Dasselbe gilt für Rekursion und Groß- und Kleinschreibung. Es ist jedoch sehr langsam. Ich denke es sollte nicht so langsam sein. Grep war erheblich schneller.
Léo Léopold Hertz 준영
Wenn das Catting nicht funktioniert, können Sie es jederzeit in eine Datei einfügen, indem Sie > results.txtdas Ende Ihres Befehls anfügen. Es gibt jedoch keine Auskunft darüber, in welcher Datei Sie es gefunden haben.
Eric
4
pcregrep -MnirIso '(?s).{0,20}pseudomonas.{0,20}' . |
  grep --color -e '^' -e pseudomonas

Angenommen, Übereinstimmungen und ihr Kontext überschneiden sich nicht und die Dateinamen enthalten keine pseudomonas.

Beachten Sie auch, dass die angegebenen Zeilennummern denen des Kontextanfangs entsprechen.

Stéphane Chazelas
quelle