Ihr Befehl ist etwas spröde, da er fehlschlägt, wenn der Dateiname ein Leerzeichen enthält. Ansonsten ist dein Befehl eigentlich nicht so schlecht. Es ist etwas Geschmackssache, aber ich finde, dass eine Kette von einfachen Pipe-Befehlen viel einfacher zu grokieren ist als ein komplexer Befehl, wie zum Beispiel der große Axt, den jemand gepostet hat. Es ist fast wahrscheinlich, dass die Programmierung in einem funktionalen Stil erfolgt.
Sie können jedoch den Grep ändern, um die awk und sed zu eliminieren, aber jetzt ist der Regex viel schwieriger zu verstehen:
grep -P -o '(?<=\): ).+?(?=: 00[7-9]|0[1-9]|1)' | sort | uniq -c | sort -nr
Um den Regex zu erklären, verwenden wir den Perl-Style re (-P param) und Looklook (? <=) Und Look-Ahead (? =), Um die Übereinstimmung mit dem Funktionsnamen genau zu isolieren. Beachten Sie, dass Look-Behind und Look-Ahead die Breite Null haben. Dies bedeutet, dass sie nicht als Teil des Matches betrachtet werden, sondern steuern, was das Match tatsächlich sein wird. Da die Übereinstimmung nun genau mit dem Funktionsnamen übereinstimmt, können Sie mit -o angeben, dass grep nur die übereinstimmende Zeichenfolge und nicht die gesamte Zeile druckt. Ich denke, Sie sollten das, was Sie haben, nicht verlassen, es sei denn, Sie denken, dass ein Dateiname mit Leerzeichen möglich ist.