Regulaere Ausdruecke in der Shell ...
- Urspruenglicher Autor: Dirk Deimeke
- Urspruengliches Datum: 15.04.2011
Vielen Befuerwortern der Z-Shell (geniale Shell!) ist nicht bewusst, dass auch die BaSH sich weiterentwickelt. So ist es schon seit einiger Zeit moeglich, regulaere Ausdruecke in Vergleichen zu verwenden.
Das folgende kleine Skript zeigt ein Beispiel.
#!/bin/bash FILENAME=datei2008-09-19 REGEX='^.*([0-9]{4})-([0-9]{2})-([0-9]{2})' if [[ $FILENAME =~ $REGEX ]] then jahr=${BASH_REMATCH[1]} monat=${BASH_REMATCH[2]} tag=${BASH_REMATCH[3]} fi echo "Jahr: $jahr, Monat: $monat, Tag: $tag"
Mit Klammern koennen Ausdruecke gruppiert und aus dem Feld (Array) BASH_REMATCH
ausgelesen werden. Dabei enthaelt das Element 0
den String, auf den der komplette Ausdruck passt und die folgenden Elemente die gruppierten Ergebnisse.
Damit lassen sich auch Suchen komplett in der Shell abwickeln, ohne dass man auf externe Tools angewiesen ist:
[[ $variable =~ 'such' ]] && echo ${BASH_REMATCH[0]}