Мне необходимо выполнить некоторые операции, в которых используются регулярные выражения.
Строка, с которой я работаю:
/dev/fd0 /media/floppy0 auto rw,us
По сути, я хочу взять первые двапараметры (/dev/fd0
и /media/floppy0
), и я хочу игнорировать все после этого.Чтобы достичь, я попробовал регулярные выражения, показанные ниже.Мой вопрос: почему следующие регулярные выражения дают разные результаты?
Регулярное выражение 1:
grep -o '/dev/f\S*\s*\S*' /etc/fstab
Вывод (вывод, который я ожидаю):
/dev/fd0 /media/floppy0
Регулярное выражение 2:
grep -o '/dev/f[\S]*\s*[\S]*' /etc/fstab
Вывод:
/dev/f
Регулярное выражение 3:
grep -o '/dev/f[^\s]*\s[^\s]*' /etc/fstab
Вывод:
/dev/fd0 /media/floppy0 auto rw,u
Я не понимаю, почему 2 и 3 не выдают тот же результат, что и 1. Я вижу это так, что для 2 не должно иметь значения, ставлю ли я символ короткой руки без пробелов (\S
)внутри класса персонажа.То же самое касается 3. Кроме того, почему 2 отличается от 3?Разве [\S]
не совпадает с [^\s]
?