Es ist zwar eine vielleicht unsaubere Lösung, sie sollte aber dennoch funktionieren: (habe jetzt gelesen, dass rekursiv gesucht werden soll ) Achtung: Das Beispiel listet alle Dateien auf, in denen ‚///‘ in mind. 3 verschiedenen Orten vorkommt, wird demnächst verbessert…
#!/bin/bash
for file in $(find $1 -iname "*.java");do
test $(grep -E '///' $file | wc -l) -ge 3 && echo $file
done
sonar ist mir bekannt, aber es geht mir gerade um ein schnelles einmaliges suchen. Ich nehme an, dass geht schneller als Sonar zu installieren, die projekte bauen zu lassen und schauen dass das alles funzt @exceptionz danke werde ich mal probieren
[QUOTE=exceptionz]Es ist zwar eine vielleicht unsaubere Lösung, sie sollte aber dennoch funktionieren: (habe jetzt gelesen, dass rekursiv gesucht werden soll )
#!/bin/bash
for file in $(find $1 -iname "*.java");do
test $(grep -E '///' $file | wc -l) -ge 3 && echo $file
done
[/QUOTE]
Findet das auch nur Kommentare die ueber mehrere Zeilen gehen?
grep funzt doch nur auf einer Zeile…
@maki
Da hast du Recht, das sollte jedoch mit Erweiterung des Scripts (xargs grep o.ä.) leicht zu lösen sein, werde dann, wenn ich wieder Zeit habe, aktualisieren…
Nein, das glaube ich nicht. Denn der Punkt matched normalerweise im Multiline-Mode auch ein Newline. Ich poste gleich mal ein Beispiel mit sed, wie es gehen kann
Ehrlich gesagt nein. Also hab ich’s jetzt ausprobiert. Funktioniert aber genauso wie gewünscht. IMHO (falls pcregrep installiert) die schönere Variante als mit sed da besser lesbar.
Wenn man pcregrep nutzt, dann sollte man @schlingel s regexp noch anpassen und vor die // ein \s* stellen. @schlingel : habs jetzt auch getestet, das Paket kurz nachinstalliert. Dafür verdient meine Lösung einen obfuscation-Award
Das wc -l mit dem test kann man weglassen, weil grep true zurückgibt, wenn es einen match gab. Man muss die Standardausgabe nur auf /dev/null umleiten. Auch bei der Lösung fehlt wieder das \s*, denn die Kommentare stehen meistens wohl nicht am Zeilenanfang.
Ein etwas übersichtlicherer Einzeiler:
find . -type f -iname '*.java' -exec sh -c 'grep -Pz "//.*
\s*//.*
\s*//" "{}" >/dev/null' \; -print