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]}

Zurück zur Uebersicht