Grep

2016-03-21 19 views
1

Birçok java dosyaları var ve biz ne sıklıkta biz mayıs hakkında bir fikir edinmek içinGrep

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

yoluyla oturum kaç kez bulmak istiyor isDebugEnabled işlevini aşırı kullanmak. Ben

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

aracılığıyla denir biz çağrıda saatlere/sayısını bulduk Ama 1 satır ifadeleri ne kadar olanların birçoğu bilmek istiyorum. Bunu ya da herhangi bir fikri en verimli şekilde araştırmak için iyi bir senaryo var mı?

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

Bu program değişken prev önceki çizgisini hatırlar ve böylece bir seferde iki satır karşılaştırmanızı sağlar:

+0

"grep" elkitabı sayfasını okudun mu? Maçtan sonra 5 satır eklemek istiyorsanız '-A 5' ekleyin. E.g .: 'grep -A 5 -r" isDebugEnabled "... – user3439894

+0

Tam olarak" kaç tane 1 tane deyim "ile ne demek istiyorsunuz? –

cevap

1

şu AWK programı kullanmak, bunun için grep kullanmayın. aslında kullanmak için

, yazma: comments grep belirtildiği gibi

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

sonra maç öncesi çizgilerin belirli sayıda yazdırmak için seçenekler sağlar.

maçtan sonra satırları yazdırmak için: Eğer bir final cevabı veren bir senaryo yazmak anlayış için farklı yaklaşımlar deneyin denemeden önce

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

neyi en iyisi:

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

maç öncesi satırları yazdırmak için istediğin şey için. Bir dosya ile test edin. logger.Debug("The database has ", getDbNum(), "and the server has ", getRemoteNumSpecial(), "records.");'un basit bir oneliner olduğunu mu düşünüyorsunuz?
İlk yönlendirmeyle ilgili bazı rakamları toplayabilirsiniz. Aşağıdaki örnekler x.java'yı örnek kaynak dosyası olarak kullanıyor.

# 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 "}"