Erweiterte grep unix
In der Regel grep-Befehl wird verwendet, um die Anzeige des line-contaning dem angegebenen Muster. Gibt es eine Möglichkeit zur Anzeige von n Zeilen vor und nach der Zeile, die enthält, der dem angegebenen Muster?
Kann erreicht werden soll dies mit awk?
betterthangrep.com
Dup: stackoverflow.com/questions/9081/...
Ich kann sich nicht auf eine andere Software für diese.
versuchen Sie bitte, mein awk-Lösung und lassen Sie uns wissen, wenn es funktioniert.
Seine nicht funktioniert, ich bin immer etwas wie awk: syntax error near line 1 awk: Rettung in der Nähe der Linie 1
Dup: stackoverflow.com/questions/9081/...
Ich kann sich nicht auf eine andere Software für diese.
versuchen Sie bitte, mein awk-Lösung und lassen Sie uns wissen, wenn es funktioniert.
Seine nicht funktioniert, ich bin immer etwas wie awk: syntax error near line 1 awk: Rettung in der Nähe der Linie 1
InformationsquelleAutor Sachin Chourasiya | 2009-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja,
enthalten num1 Zeilen Kontext vor dem Spiel, und num2 Zeilen Kontext nach dem Spiel.
EDIT:
Scheint die OP ist mit AIX. Dieser hat einen anderen Satz von Optionen, die enthalten nicht -B und -A
dieser link beschreibt grep auf AIX 4.3 (es sieht nicht vielversprechend)
Matt perl-Skript könnte eine bessere Lösung sein.
Ich arbeite unter AIX.
Ich habe retagged die Frage. Ich hoffe, dass es ein AIX-Experte kommt.
InformationsquelleAutor pavium
Hier ist, was ich normalerweise nicht auf AIX:
Wenn Sie nicht möchten, dass die extra 2 varialbles können Sie sich immer mit es ein eine eine Zeile:
Angenommen ich habe ein Muster 'stack' und das mit dem Namen ist flow.txt
Ich möchte 2 Zeilen vor und 3 Zeilen nach. Der Befehl wird so sein:
Ich möchte 2 Zeilen vor und nur das, wird der Befehl wie:
Möchte ich 3 Zeilen nach und nur das, wird der Befehl wie:
Mehreren Dateien - ändern Sie es für Awk & grep. Von oben für das Muster 'stack' mit dem Dateinamen wird fließen.* - 2 Zeilen vor und 3 Zeilen nach. Der Befehl wird so sein:
Sie können ersetzen flow.txt mit flow.* an 2 stellen, einmal für die grep und einmal für awk. zum Beispiel für das Muster 'stack' und das mit dem Namen ist fließen.* - 2 Zeilen vor und 3 Zeilen nach. Der Befehl wird so sein:
grep -n 'stack' flow.* | cut -d':' -f1 | xargs -n1 -I % awk 'NR<=%+3 && NR>=%-2' flow.*
Aktualisiert den post oben für Klarheit.
Ich glaube nicht, dass es funktioniert, da schneiden Sie jetzt zurück dem Namen der Datei, und keine Zeile von occurency
Ja, du hast Recht. Wir können -f2
cut -d':' -f2
Lassen Sie mich wissen, wenn es funktioniert.InformationsquelleAutor user 923227
Tags, ist es wahrscheinlich, dass das system über einen grep, der kann keine Unterstützung für die Bereitstellung von Kontext (Solaris ist ein system das nicht und ich kann mich nicht erinnern, über AIX). Wenn das der Fall ist, gibt es ein perl-Skript, das helfen kann, bei http://www.sun.com/bigadmin/jsp/descFile.jsp?url=descAll/cgrep__context_grep.
InformationsquelleAutor Matt
Wenn du sed benutzen Sie diese shell-Skript
Was es tut, ist, grep -n-Präfixe jedes Spiel mit der Linie, auf der es gefunden wurde, ist die sed-Streifen alle, aber die Linie, auf der es gefunden wurde. Verwenden Sie dann den Kopf, um die Linien bis zu der Linie, auf der es gefunden wurde auf plus eine zusätzliche $NACH Linien. Das ist dann an Schwanz für nur $VOR + $ + 1 Linien (das heißt, Ihre passende Zeile plus die Anzahl der Zeilen vor und nach)
InformationsquelleAutor Puppe
Sicher, dass es (aus der grep-man-Seite):
und wenn Sie möchten, dass die gleiche Menge an Zeilen vor UND nach dem Spiel, verwenden Sie:
Schauen Sie meine andere Antwort, es sollte funktionieren für AIX, seit AIX unterstützt -n argument.
Können wir etwas standard-oder eine Kombination von awk für diese
haben Sie versucht, mein awk-Lösung dann?
InformationsquelleAutor Puppe
können Sie awk
Ausgabe
verwenden nawk, wenn Sie es haben.
InformationsquelleAutor ghostdog74