2016-07-25 8 views
1

Ich brauche ein Bash-Skript zu schreiben, wenn das erste Argument an das Skript geliefert überprüft ein glob Muster übereinstimmt, die in JavaScript RegExp ich alsprüfen Bash-Skript Argument gegen Muster, und ersetzen Sie ein Zeichen in es

^[a-zA-Z0-9]+\.[a-zA-Z]{2,}$ 
ausdrücken würde

Mit anderen Worten: beginnt mit einem oder mehreren Alphabeten/Ziffern, gefolgt von genau einem Punkt, gefolgt von 2 oder mehr Alphabeten und endet. Alles andere sollte den Test nicht bestehen.

Dann muss ich auch die Periode im Argument durch einen Unterstrich ersetzen.

Bisher kann ich überprüfen, ob das Argument leer ist:

case $1 in 
    '') echo "No argument supplied" >&2; exit 1 ;; 
esac 

ich das Muster Test werden müssten negiert und setzen nach dem '' Prüfung in diesem Fall Aussage Figur, aber ich habe keine Ahnung, wie man konstruiere es. Jede direkte Hilfe oder Online-Ressourcen würden sehr geschätzt werden.

Ich möchte auch jede mögliche Hilfe mit, wie ich dann das gültige vorhandene Argument ändern kann, um die einzelne Periode darin durch einen Unterstrich zu ersetzen.

Antwort

2

Gleicher Regex funktioniert auch in BASH. Betrachten Sie dieses Schnipsel:

re='^[a-zA-Z0-9]+\.[a-zA-Z]{2,}$' 
s='abc123.xy' 

[[ $s =~ $re ]] && echo "${s/./_}" 
abc123_xy 
+1

Schätzen Sie das. Ich konnte die case-Anweisung entfernen und durch 'if [[$ 1 = ~ $ re]]; dann ersetzt = "$ {1 /./_}" else echo "Argument ist leer oder ungültig" && exit 1 fi' – Sidd

Verwandte Themen