Ich bin verpflichtet, einige Operationen, die reguläre Ausdrücke beinhalten.Regex - Verwenden von Short-Hand-Zeichen in einer Zeichenklasse
String Ich bin Betrieb auf:
/dev/fd0 /media/floppy0 auto rw,us
Im Grunde, was ich tun möchte, ist die ersten beiden Parameter übernehmen (/dev/fd0
und /media/floppy0
) und ich will alles danach ignorieren. Um das zu erreichen, habe ich die unten gezeigten regulären Ausdrücke ausprobiert. Meine Frage ist, warum ergeben die folgenden regulären Ausdrücke unterschiedliche Ergebnisse?
Regulärer Ausdruck 1:
grep -o '/dev/f\S*\s*\S*' /etc/fstab
Output (die Ausgabe, die ich erwarte):
/dev/fd0 /media/floppy0
Regulärer Ausdruck 2:
grep -o '/dev/f[\S]*\s*[\S]*' /etc/fstab
Ausgang:
/dev/f
Regulärer Ausdruck 3:
grep -o '/dev/f[^\s]*\s[^\s]*' /etc/fstab
Ausgang:
/dev/fd0 /media/floppy0 auto rw,u
Ich sehe nicht, warum 2 und 3 haben die gleiche Ausgabe wie 1. Die Art, wie ich es nicht produzieren zu sehen ist, dass für 2, sollte es egal sein, ob ich das nicht-weiße Leerzeichen Short-Hand-Zeichen (\S
) innerhalb einer Zeichenklasse setzen. Das gleiche gilt für 3. Außerdem, warum unterscheidet sich 2 von 3? Ist [\S]
das gleiche wie [^\s]
?
Great! Danke für die Erklärung. – kpatelio
@ user600194: Gern geschehen! – ruakh