Ich möchte so etwas in KSH machen:
if (( $var = (foo|bar)[0-9]*$ )); then
print "variable matched regex"
fi
Ist das überhaupt möglich?
Für die Aufzeichnung verwende ich Ksh Version M-11/16/88i
auf einem Solaris 10-Computer.
Ich möchte so etwas in KSH machen:
if (( $var = (foo|bar)[0-9]*$ )); then
print "variable matched regex"
fi
Ist das überhaupt möglich?
Für die Aufzeichnung verwende ich Ksh Version M-11/16/88i
auf einem Solaris 10-Computer.
[foo|bar]
"ein einzelnes Zeichen aus der Menge (a, b, f, o, r, |) übereinstimmen" bedeutet? Wenn Sie "Match 'Foo' oder 'Bar'"(foo|bar)
Antworten:
Ksh hat reguläre Ausdrücke, jedoch nicht in der üblichen Syntax (nicht in der Version in Solaris 10 ).
Suchen Sie im Handbuch unter "Bedingte Ausdrücke" nach den Angaben in den Klammern und unter "Generierung von Dateinamen" nach der Mustersyntax.
quelle
=~
Operator verwendet).Die Verwendung
case
mit Glob-Mustern funktioniert möglicherweise für Sie. Das zusammengesetzte Muster*(pattern-list)
bedeutet "Entspricht null oder mehr Vorkommen der angegebenen Muster" und@(pattern-list)
bedeutet "Entspricht genau einem der angegebenen Muster".Ausgänge:
quelle
Warum nicht egrep (1) verwenden ? Gibt Ihnen alles, was sich ein Regex-Benutzer wünschen kann:
Zusätzlicher Hinweis für Solaris: Mit Solaris möchten Sie möglicherweise die Manpage auf egrep überprüfen. Es gibt eine andere egrep- Version
/usr/xpg4/bin/egrep
, die einige weitere Optionen unterstützt und sich in der Funktionalität unterscheidet, wenn es um erweiterte Regex-Inhalte geht.quelle
Ich habe so etwas mit gemacht
sed
. Ich weiß nicht, wie gut es ist, aber zumindest hat es funktioniert ^^quelle
grep
ist natürlicher , aber es gibt einen Weg, der in ksh eingebaut ist .Ich weiß, dass ich zu spät zur Party komme, aber anstelle der Lösung von ktf:
Sie können auch verwenden
Diese Technik mit dem
<<<
Bediener wird als Herestring bezeichnet . Ich sollte jedoch auch eine Warnung hinzufügen : Dies funktioniert NICHT in einer schreibgeschützten Umgebung (dh Sie erhalten hässliche Fehlermeldungenstderr
), da für den Herestring eine temporäre Datei erforderlich ist, in die irgendwo geschrieben werden soll. Soweit ich weiß,echo
funktioniert der "klassische" Weg mit und einer Pipe auch ohne Schreibgenehmigung.quelle