Also, wahrscheinlich sollte ich das verwenden grep
. Solange ich eine rekursive Suche benötige, sollte ich verwenden grep -r
. Aber dann weiß ich nicht, was ich als nächstes tun soll;)
Wie kann ich das machen?
shell-script
text-processing
grep
regular-expression
pushandpop
quelle
quelle
find . -type f -exec awk 'length > 100 && /if/' {} +
Antworten:
Sie können zwei Greps verwenden, die durch eine Pipe verbunden sind:
Um Dateien mit
if
Pfaden oder Namen auszuschließen , verwenden Sie':.*if'
stattdessen'if'
(könnte immer noch unterbrochen werden, wenn Ihre Dateinamen oder Pfade Doppelpunkte enthalten).quelle
if
in ihrem Pfad befinden':.*if'
verhindern (es sei denn, Ihre Dateinamen enthalten Doppelpunkte).Mit
grep
s, die die Optionen (-r
rekursiv) und-P
(PCRE) unterstützen (oderpcregrep
mit-r
):Oder POSIXly:
(Beachten Sie, dass das Verhalten zwischen den Implementierungen für Nicht-Text-Dateien variiert (Dateien, die keine Zeichen, Null-Byte-Werte, zu lange Zeilen oder Daten nach der letzten neuen Zeile enthalten). Beachten Sie auch, dass einige
grep
Implementierungen in nicht regulären Dateien suchen oder dies auch tun folgen Sie symbolischen Links).quelle
grep
, der dies tut, und selbst dieser benötigt seine in die Bibliothek integrierte Unterstützung, um so zu funktionieren, wie ich es verstehe. Sind da mehr?grep
von ast-open, das eine eigene Implementierung von Perl-ähnlichen regulären Ausdrücken hat. Zu den unterstützten Grep-Implementierungengrep -rP
gehören GNU, FreeBSD / OS / X (eine Neufassung von GNU-Grep, die jetzt divergiert) und Ast-Open'sVerwenden Sie awk, um die Größe von $ 0 und das Vorhandensein von Teilzeichenfolgen zu zählen, wenn?
awk '( length($0) > 100 && index($0,"if") ){print}' file
Wenn "if" ein Wort sein sollte (im Gegensatz zu einem einfachen Teilstring), können Sie verwenden
awk '( length($0) > 100 && match($0,/\<if\>/) ){print}' file
quelle
awk
wäre eher soawk 'length > 100 && /if/' file
. Beachten Sie, dass Sie für/\<if\>/
GNU benötigenawk
.Angepasst an Suchen von Zeilen, die eine bestimmte Länge überschreiten, funktioniert eine der folgenden Optionen, um Zeilen zu finden, die länger als 100 Zeichen sind
Wählen Sie Ihre bevorzugte Methode und leiten Sie sie durch
grep if
quelle
sed -n '/.\{100\}/{/if/p}' file
. Ähnlich die Perl:perl -nle 'print if length$_>99 && /if/'
mit einem einzigen
grep
:Dadurch werden nur Zeilen ausgewählt, die mit beiden Anweisungen nicht von Kopf bis Schwanz beschrieben werden können. und so wird keine Zeile ausgewählt, die als aus 0 bis 99 Zeichen bestehend beschrieben werden kann, und in ähnlicher Weise wird auch keine Zeile ausgewählt, die mehr als 99 Zeichen entspricht und dennoch nicht mindestens eine einzige enthält, wenn sie ebenfalls nicht ausgewählt wird.
Sie könnten es jedoch besser machen, nur zwei
grep
s zu verwenden .quelle