Bash-Tricks: grep Ersetzen durch =~: Unterschied zwischen den Versionen
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 '''=…“) |
KKeine Bearbeitungszusammenfassung |
||
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
{{:Bash: Performance Tricks}} | {{:Bash: Performance Tricks}} | ||
===Regel=== | ===Regel=== | ||
Der Aufruf des externe Kommandos '''grep''' kann oft durch den regexp | 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 | Als Beispiel sollen 20 Dateien nach dem Vorkommen der Zahl 5 durchsucht werden. | ||
{| {{table}} | {| {{table}} | ||
Zeile 11: | Zeile 11: | ||
| align="center" style="background:#f0f0f0;"|''' Linux''' | | align="center" style="background:#f0f0f0;"|''' Linux''' | ||
|- | |- | ||
| vorher || | | vorher ||13.429 s ||0.078 s | ||
|- | |- | ||
| nachher || | | 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 [[Bash-Tricks: cat Ersetzen durch Umleitungsoperator|nächste Trick]]. | |||
===Demonstration=== | ===Demonstration=== | ||
<source lang=bash> | <source lang=bash> | ||
Zeile 28: | Zeile 30: | ||
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 | 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 47: | ||
time ( for i in *.txt; do | time ( for i in *.txt; do | ||
datei_inhalt=`cat $i` | datei_inhalt=`cat $i` | ||
regex=' | 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: |
Aktuelle Version vom 13. Januar 2010, 13:42 Uhr
- Zusammenfassen von externen Kommandos:
for i in *; ls $i; done - grep Ersetzen durch =~ :
... | grep abc.txt - 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"
)