Bash-Tricks: grep Ersetzen durch =~
Zur Navigation springen
Zur Suche springen
- 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 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
echo "======== mit grep ==========="
treffer=""
time ( for i in *.txt; do
if [ ! -z `cat $i | grep -l 15` ]; then treffer+="$i"; 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='15'
if [[ $datei_inhalt =~ $regex ]]; then treffer+="$i"; fi
done
echo "=~: Folgende Dateien enthalten die Zahl 5:
$treffer"
)