Почему это число совпадает с этим регулярным выражением?

Все остальные ответы здесь, как минимум, в основном верны для нормального случая, и я бы рекомендовал прочитать любой из них перед своим, но вы упомянули, что dd и dd имеют типичный вариант использования, который может не включать кеширование записи. Кэширование записи в основном реализовано на уровне файловой системы. Необработанные устройства обычно не выполняют кэширование записи (несколько драйверов устройств, таких как raid или lvm, являются еще одним шаром воска). Поскольку dd часто используется с необработанными блочными устройствами, он предоставляет bs и связанные с ним параметры, позволяющие записывать большие объемы данных для повышения производительности на необработанных устройствах. Это не так полезно, когда обе конечные точки являются обычными файлами (хотя в этом случае для больших операций записи используется меньше системных вызовов). Другое распространенное место, где это особенно заметно, - это пакет mtools, который представляет собой реализацию файловой системы с расширенным пространством пользователя. использование mtools с дисководом для гибких дисков всегда кажется невероятно медленным, поскольку инструменты полностью синхронизированы, а дисководы для гибких дисков работают невероятно медленно. Монтирование дискеты и использование файловой системы ядра Fat намного более оперативны, за исключением umount, который является синхронным (и очень важно, чтобы это было так, чтобы предотвратить потерю данных, особенно для съемных устройств, таких как дискеты). Есть только несколько других программ, которые, как мне известно, регулярно используются с необработанными устройствами, такими как специально настроенные базы данных (которые реализуют собственное кэширование записи), tar и специальные инструменты для устройств и файловых систем, такие как chdsk, mkfs и mt.

4
16.02.2018, 06:57
2 ответа

La expresión regular no está anclada, por lo que es libre de hacer coincidir los primeros 1 o dos números y "tener éxito", dejando los números posteriores (con éxito )sin coincidencia.

Si necesita números de 1 o 2 dígitos, ancle la expresión regular:

'^-?([0-9]|([1-9][0-9]))$'

Algunos ejemplos:

$ seq -100 -99 | grep -E '^-?([0-9]|[1-9][0-9])$'
-99

$ seq 99 100 | grep -E '^-?([0-9]|[1-9][0-9])$'
99

$ seq -9 9  | grep -E '^-?([0-9]|[1-9][0-9])$'
-9
-8
-7
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
7
8
9

$ seq -2231 -100 | grep -E '^-?([0-9]|[1-9][0-9])$'
(empty)
21
27.01.2020, 20:44

Большинство программ, использующих шаблоны регулярных выражений, фактически реализуют поиск шаблона вместо полного -совпадения строки . В Python есть разные методыsearch()и match(), где search()соответствует в любом месте строки, а match()— только в начале. grepимеет опцию -xдля запроса совпадения со всей строкой; по умолчанию он соответствует любому месту в строке. Другие, такие как sed, awkи Perl, будут с радостью искать шаблон в любом месте строки. Используйте модификаторы ^и $(«якоря» ), чтобы принудительно установить шаблон в начало или конец строки (соответственно ).

Итак, шаблон ERE, который вам нужен, вероятно, это:

^-?[1-9]?[0-9]$
14
27.01.2020, 20:44

Теги

Похожие вопросы