ls -l с регулярным выражением grep

Имена пользователей Unix определенно чувствительны -к регистру, и, более того, использование имен пользователей с прописными буквами в системах Unix может привести к нежелательным результатам, поэтому этого следует избегать.

Некоторые примеры::

Это может нарушить работу электронной почты пользователя. Стандарты для SMTP допускают, что адреса электронной почты нечувствительны к регистру -, и по умолчанию MTA, получающий сообщение, преобразует адрес электронной почты в нижний регистр, чтобы найти пользователя для доставки. Если имя пользователя содержит символы верхнего регистра, оно не будет разрешено без специальных переопределений конфигурации для этого. (Это влияет на MTA, такие как sendmail, postfix и т. д., а также на агенты обработки доставки, такие как procmail)

Многие ранние аппаратные терминалы не были чувствительны к регистру. Обычно они использовали только заглавные буквы. При входе в некоторые версии Unix начало имени для входа с символа в верхнем регистре заставит систему предположить, что вы используете древний терминал, работающий только в верхнем регистре, и активирует сворачивание регистра -, которое преобразует все введенные вами символы в верхнем регистре в нижний регистр (затем вам нужно экранировать символы верхнего регистра, чтобы сказать, что они в верхнем регистре ), чтобы помочь вам ввести свое имя пользователя, которое, как ожидается, будет в нижнем регистре. Я не верю, что это работает в Linux, но я видел, как это продемонстрировано на HP -UX.

Поскольку долгое время было принято использовать в именах пользователей только строчные буквы, разумно ожидать, что другие инструменты (, о которых мы, возможно, и не подумали )в системе, также могут предполагать, что имя пользователя должно быть строчным., и делать проверки, конвертации и т.д. соответственно,таким образом ломая вещи для этого пользователя.

2
24.12.2019, 19:50
1 ответ

Предварительное примечание:Использование базового регулярного выражения (по умолчанию )в grepзаставляет экранировать символами обратной косой черты -несколько метасимволов (см. «Базовые и расширенные регулярные выражения» в grep. ] справочная страница). Я избегал этих дополнительных escape-символов в приведенных ниже примерах, поэтому вам следует использовать их как расширенное регулярное выражение сgrep -E <regexp>(или самостоятельно экранировать соответствующие мета-символы -).


В регулярном выражении [0-999]означает «совпадение ровно с одним символом в диапазоне 0 -9 или 9 или 9»

То, что вы ищете, это (Сначала я выберу самый простой )"соответствует любому количеству символов в диапазоне 0 -9", что будет переведено на [0-9]*.

Также обратите внимание, что .соответствует любому символу. Чтобы точно соответствовать периоду, вы должны экранировать значение как\.

Таким образом, ваше окончательное регулярное выражение будет^list_of_cars-[0-9]*\.json

Теперь это будет соответствовать 0 или более цифрам, таким образом, list_of_cars-.jsonбудет соответствовать.Мы могли бы ограничиться одним шагом, попросив «соответствовать одному или нескольким символам в диапазоне 0 -9», что будет^list_of_cars-[0-9]+\.json

Мы могли бы ввести еще более строгие ограничения, указав «соответствие от 1 до 3 символов в диапазоне от 0 -9», если вы действительно хотите убедиться, что вы не получите результаты, превышающие 999 =>^list_of_cars-[0-9]{1,3}\.json

7
27.01.2020, 21:53

Теги

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