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

Aus Hergipedia
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Bash: Performance Tricks {{:Bash: Performance Tricks}} ===Regel=== Der Aufruf des externe Kommandos '''grep''' kann oft durch den regexp Vergleisoperator '''=…“)
 
Zeile 28: Zeile 28:
   echo "Datei." >> $i.txt
   echo "Datei." >> $i.txt
done
done
newline="
"


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

Version vom 13. Januar 2010, 13:21 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 Vergleisoperator =~ der bash ersetzt werden.

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

Cygwin Linux
vorher x.x s 0.078 s
nachher x.x s 0.037 s

(Die meiste Zeit verbringen die Tests jetzt beim Aufruf des externen Kommandos cat).

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"
)