В регулярном выражении, для каких символов нужен выход?

Старинные вещи ALT (несколько версий изображений установки) могли бы быть хорошо для Ваших требований; описание то, хотя в форме обсуждения создателей дистрибутива на русском языке.

В целом это просто основано на Sisyphus, постоянно разрабатываемом репозитории общего назначения пакетов/основания для distros&solutions.

(Дальнейший вопрос должен быть, вероятно, рассмотрен создателям, не мне, потому что я даже не пользователь их проекта, но возможно я попробую его однажды на старом ноутбуке Toshiba.)

23
17.09.2011, 22:59
5 ответов

Это зависит от приложения. В Вашем примере [ должен быть заключен в кавычки как аргумент в пользу grep но нет echo.

Для оболочки (от спецификаций POSIX):

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

Приложение должно заключить следующие символы в кавычки, если они должны представить себя:

|  &  ;  <  >  (  )  $  `  \  "  '  <space>  <tab>  <newline>

и следующее, возможно, должно быть заключено в кавычки при определенных обстоятельствах. Таким образом, эти символы могут быть специальными в зависимости от условий, описанных в другом месте в этом объеме Станд. IEEE 1003.1-2001:

*   ?   [   #   ˜   =   %

Различные механизмы заключения в кавычки являются символом ESC, одинарными кавычками и двойными кавычками. Здесь-документ представляет другую форму заключения в кавычки; см. Здесь-документ.

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

12
27.01.2020, 19:42

Каждое приложение будет иметь свой собственный набор 'специальных' символов. Проблема, с которой Вы столкнулись, была с grep не оболочка. Для которого символы должны быть заключены в кавычки в grep, считайте раздел страницы справочника по "РЕГУЛЯРНЫМ ВЫРАЖЕНИЯМ".

Для оболочки, которая символы, которые должны быть заключены в кавычки:

;'"`#$&*?[]<>{}\

и любой пробел.

В зависимости от оболочки другие символы, возможно, должны быть заключены в кавычки также:

!^%

Посмотрите под "ГРАММАТИКОЙ SHELL" на странице справочника оболочки.

8
27.01.2020, 19:42
  • 1
    В некоторых оболочках с расширением истории (bash включенный), ! все еще расширен в двойных кавычках, только одинарные кавычки остановят его расширение (или выключение опции оболочки). –  Chris Down 15.09.2011, 21:46
  • 2
    ] не должен быть заключен в кавычки, [ не всегда. Я не нашел ссылки на { и } –  Matteo 15.09.2011, 21:57

grep использование BRE как его regex метод. Существует хорошая документация относительно него здесь, общее краткое изложение было бы "Escape любой специальный символ или метасимвол, чтобы заставить его литерал, Escape создавать escape-последовательности (\n, \r, и т.д.)", хотя это не всегда верно, например, что необходимо выйти ( и ) получить их особое значение (обратная ссылка).

3
27.01.2020, 19:42

Убедитесь, что у пользователя и root есть пароли; как root, выполните

passwd user
passwd

(при необходимости заменив пользователя ). После этого можно заменить

console::respawn:/bin/sh -l

, который непосредственно запускает оболочку, на

console::respawn:/bin/login

, если в системе имеется /bin/login .

Традиционно для полного управления последовательным соединением используется getty , что-то вроде

console::respawn:/sbin/getty 38400 console

(Я не уверен, что это подходящие варианты для вашей установки.)

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

-121--229381-

Существует несколько типов регулярных выражений, и набор специальных символов зависит от конкретного типа. Некоторые из них описаны ниже. Во всех случаях специальные символы удаляются с помощью обратной косой черты \. Например, для соответствия [ вместо этого следует записать \[ . Кроме того, символы (за исключением ^ ) можно удалить, заключив их в квадратные скобки, например, [[] .

Символы, которые являются особыми в некоторых контекстах, таких как ^ специальные в начале (суб-) выражения, можно избежать во всех контекстах.

Как писали другие: в оболочке, если вы не заключите выражение между одиночными кавычками, вам придется дополнительно уйти от специальных символов оболочки в уже сбежавшем регексе. Пример: Вместо '\[ ' можно написать \\ (или: «\[ » или «\\[» ) в совместимых оболочках Борна, например bash, но это другая история.

Basic Regular Expressions (BRE)

  • POSIX: Basic Regular Expressions
  • Команды: grep, sed
  • Специальные знаки: . [\
  • Особенный в некоторых контекстах: *^ $
  • Побег последовательность: » $ (printf '%s' «$string» | sed's / [. $ [\*^] / \\&/g') «

Extended Regular Expressions (ERE)

  • POSIX: Extended Regular Expressions
  • Команды: grep-E , GNU: sed-r , *BSD: sed-E
  • Специальные знаки: . [\(
  • Особенный в некоторых контекстах: *^ $) +? {|
  • Побег последовательность: » $ (printf '%s' «$string» | sed's / [. $ [\*^ () +? {|] / \\&/g') «
9
27.01.2020, 19:42

Оболочка может преобразовывать командную строку перед выполнением команды. И оболочка, и grepмогут использовать кавычки для удаления специального значения некоторых символов. Тем не менее, grepи оболочки имеют разные специальные символы. Более того, неэкранированные специальные символы, которые не являются результатом существующего расширения, удаляются оболочкой перед выполнением команды.

echo '[]' | grep '[]'

Оболочка передает аргумент []в grep, и grepанализирует его как выражение в квадратных скобках.

echo '[]' | grep \[]

Выше мы видим аналогичный случай. Обратная косая черта удаляется, а []передается в качестве аргумента в grep. grepраспознает неправильное выражение скобок.

echo '[]' | grep '\[]'

Наконец, в этом случаекавычки удаляются оболочкой, и \[]передается в качестве аргумента в grep, но в этом конкретном случае ¹ \[интерпретируется grepкак буквальная скобка. Кавычки необходимы для предотвращения интерпретации обратной косой черты оболочкой как специального символа.


¹Спецификация POSIX .

0
27.01.2020, 19:42

Теги

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