Ich möchte in meinem Code Zeilen finden, die eine bestimmte Länge überschreiten. Mein Code ist in mehreren Dateien. Was ist ein guter Weg, um dies zu tun?
Ich möchte die Dateien und Zeilennummern kennen; Inhalt wäre bevorzugt, aber nicht notwendig. Der Zweck der Übung ist es, dann herauszufinden, wie die Linien gebrochen werden (wahrscheinlich manuell).
text-processing
Marcin
quelle
quelle
grep
) oder als Zeilennummern oder als etwas anderes (vielleicht möchten Sie eine andere Aktion auf sie anwenden)? Der wahrscheinlich bequemste Weg, dies zu tun, hängt davon ab, was als nächstes mit diesen Zeilen geschehen wird.Antworten:
Mit
grep
:Für Zeilen mit mindestens 12 Zeichen.
Mit mehreren Dateien:
Einige
grep
Implementierungen wie GNUgrep
können die Dateisuche selbst durchführen.Aber hüte dich vor Symlinks und anderen nicht regulären Dateien.
quelle
AWK-Lösung
Oder genauer gesagt:
quelle
awk 'length > 5'
awk 'length > 5'
awk
die etwas weniger elegante, aber prägnanteawk '/^.{6,}/'
awk '/.{6}/'
(tatsächlich war GNU awk bis vor kurzem derjenige, bei dem das nicht funktioniert, wenn Sie POSIXLY_CORRECT nicht an seine Umgebung übergeben).Da fehlte nur noch eine
sed
Lösungquelle
Bash-Lösung
Also zB
./whatever.sh < input.file
. Dies schließt den Zeilenumbruch durch Subtrahieren von 1 von nicht ein$len
. Wenn dies nicht erwünscht ist oder Ihre Eingabe CRLF-Endungen verwendet, sollten Sie dies entsprechend anpassen.quelle
${#line}
dieexpr
Gabel vermeiden ?bash
Lösung. Beachten Sie jedoch, dass führende Leerzeichen ignoriert werden , sofern Sie nichtIFS=
davorread
bleiben.$line
keinen abziehen müssen.read
Namen zum Einlesen angeben , wird derREPLY
gesamte Whitespace eingelesen und eingeschlossen. KeineIFS
Einstellung erforderlich.while read
Schleifen zum Verarbeiten von Text sind wirklich eine schlechte Praxis.Mit
perl
(zum Beispiel), vorausgesetzt , Sie suchen nach Zeilen , die länger als 80 Zeichen:So zeigen Sie die Zeilen an:
So zeigen Sie die Zeilennummer an:
Oder beides:
quelle
-l
Befehlszeile hinzufügen , umperl
Zeilenumbrüche in Ihren Zeilen zu zählen.Ruby:
Python:
quelle
Hier ist eine andere Bash-Lösung (Bash 4):
Das resultierende Array ist dünn, sodass die Array-Indizes beibehalten werden. Seit wir bei 1 angefangen haben, sind die Indizes die Zeilennummern der Zeilen, die wir behalten haben. Wir können nur diese Zeilennummern ausgeben:
Oder wir können die Zeilen selbst ausgeben:
quelle