2016-03-21 4 views
1

ich viele Java-Dateien haben, und ich will, wie oft finden wir überGrep für die 5 Zeilen nach einer bestimmten Textzeichenfolge in Dateien gefunden

logger.isDebugEnabled(){ 
    logger.Debug("some debug message"); 
} 

Um eine Vorstellung davon, wie oft zu bekommen protokollieren können wir Verwenden Sie die isDebugEnabled-Funktion übermäßig. Ich habe die Anzahl der Male fanden wir genannt haben/wo es über

grep -r "isDebugEnabled" --include=*.java . | wc -l 

genannt wird, aber ich möchte wissen, wie viele von denen sind 1 Zeile Aussagen. Hat jemand ein gutes Skript, um nach diesem oder irgendwelchen Ideen auf dem effizientesten Weg zu suchen?

+0

Haben Sie die Handbuchseite für 'grep' gelesen? Wenn du 5 Zeilen nach dem Spiel einfügen willst, füge '-A 5' hinzu. Beispiel: 'grep -A 5 -r" isDebugEnabled "...' – user3439894

+0

Was genau meinen Sie mit "wie viele davon sind 1-Zeilen-Anweisungen"? –

Antwort

1

Sie grep für diese nicht, verwenden Sie die folgende AWK Programm verwenden:

prev ~ /isDebugEnabled/ && $0 ~ /logger\.Debug\("[^"]"\)/ { 
    print FILENAME ":" NR ": " $0 
} 
{ 
    prev = $0 
} 

Dieses Programm erinnert sich an die vorhergehende Zeile in der prev variabel und damit können Sie zwei Zeilen auf einmal vergleichen.

Um es tatsächlich zu verwenden, schreiben:

find . -name '*.java' -print \ 
| xargs awk 'prev ~ /isDebugEnabled/ && /logger\.Debug\("[^"]"\)/ { print FILENAME ":" NR ": " $0 } { prev = $0 }' 
1

Wie in den Kommentaren grep genannten Optionen bieten bestimmte Anzahl von Zeilen nach und vor dem Spiel zu drucken.

Um Zeilen nach Spiel zu drucken:

grep -A 2 "string to match" file.txt 

Zeilen vor dem Match drucken:

grep -B 2 "string to match" file.txt 
0

Bevor Sie versuchen, ein Skript zu schreiben, eine endgültige Antwort zu geben, versuchen verschiedene Ansätze zur Einsicht, was das Beste für was du willst. Test mit einer Datei. Denkst du, dass logger.Debug("The database has ", getDbNum(), "and the server has ", getRemoteNumSpecial(), "records."); ein einfacher Oneliner ist?
Sie können einige Zahlen für eine erste Orientierung sammeln. In den folgenden Beispielen wird x.java als Beispielquelldatei verwendet.

# Nr of isDebugEnabled calls 
grep -c "logger.isDebugEnabled" x.java 
# Some may be comment with // 
grep -c "//.*logger.isDebugEnabled" x.java 
# How much debug-lines 
grep -c "logger.Debug" x.java 
# How much debug-lines with more than 1 parameter (having a ,) 
grep -c "logger.Debug.*," x.java 
# How much debug-lines without the closing) on the same line 
grep "logger.Debug" x.java | grep -v "Debug.*)" 
# How much logger.isDebugEnabled() without a logger.Debug on the next line 
grep -A1 "logger.isDebugEnabled" x.java | grep -c "logger.Debug" 
# How much logger.Debug a "}" on the next line 
# The debugline might have a }, so skip lines with logger.Debug 
grep -A1 "logger.Debug" x.java | grep -v "logger.Debug" | grep -c "}" 
Verwandte Themen