Bash-Tricks: grep Ersetzen durch =~: Unterschied zwischen den Versionen

Aus Hergipedia
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
 
Zeile 16: Zeile 16:
|}
|}


(Die meiste Zeit verbringen die Tests jetzt beim Aufruf des externen Kommandos '''cat''').
Die meiste Zeit verbringen die Tests jetzt beim Aufruf des externen Kommandos '''cat'''. Das kann weiter verbessert werden,
siehe der [[Bash-Tricks: cat Ersetzen durch Umleitungsoperator|nächste Trick]].


===Demonstration===
===Demonstration===

Aktuelle Version vom 13. Januar 2010, 13:42 Uhr

Bash: Performance Tricks

  1. Zusammenfassen von externen Kommandos: for i in *; ls $i; done
  2. grep Ersetzen durch =~ : ... | grep abc.txt
  3. cat Ersetzen durch < : cat abc.txt

Regel

Der Aufruf des externe Kommandos grep kann oft durch den regexp Vergleichsoperator =~ der bash ersetzt werden.

Als Beispiel sollen 20 Dateien nach dem Vorkommen der Zahl 5 durchsucht werden.

Cygwin Linux
vorher 13.429 s 0.078 s
nachher 5.376 s 0.037 s

Die meiste Zeit verbringen die Tests jetzt beim Aufruf des externen Kommandos cat. Das kann weiter verbessert werden, siehe der nächste Trick.

Demonstration

mkdir bash-performance-tricks
cd bash-performance-tricks
for ((i=0; i<20; ++i )); do 
  echo "Hallo" > $i.txt
  echo "Welt." >> $i.txt
  echo "Dies" >> $i.txt
  echo "ist die $i." >> $i.txt
  echo "Datei." >> $i.txt
done

newline="
"

echo "======== mit grep ==========="
treffer=""
time ( for i in *.txt; do 
  if [ ! -z "`cat $i | grep -l 5`" ]; then treffer+="$i$newline"; fi
done
echo "grep: Folgende Dateien enthalten die Zahl 5:
$treffer"
)

echo "======== mit =~ ============="
treffer=""
time ( for i in *.txt; do 
  datei_inhalt=`cat $i`
  regex='5'
  if [[ $datei_inhalt =~ $regex ]]; then treffer+="$i$newline"; fi
done
echo "=~: Folgende Dateien enthalten die Zahl 5:
$treffer"
)