Как мне найти строку после регулярного выражения в одной строке текста?

Если у вас есть целый шаблон, который вы хотите сопоставить буквально , не рассматривайте его как регулярное выражение. Если вам doнужно сопоставить литерал $в регулярном выражении, используйте \$.

Нравится . , \и несколько других знаков препинания, $— это метасимвол в регулярных выражениях. Символ $соответствует пустой строке в конце строки (поэтому x$соответствует x, но только в конце строки. линия). Если ваш шаблон не содержит каких-либометасимволов, вам не нужно рассматривать его как регулярное выражение, и вы должны использовать grep -F , как объясняет Кусалананда.

Есливам действительно нужно сопоставить $или любой другой метасимвол буквально в регулярном выражении, экранируйте его метасимволом \. Чтобы сопоставить литерал $напишите \$, чтобы сопоставить литерал \напишите \\и так далее.

param='ambari_parameter\$'
echo "ambari_parameter$" | grep "$param"

Когда вы присваиваете paramв оболочке, заключайте регулярное выражение в одинарные кавычки ( ''), как показано выше, потому что $и \также имеют особое значение в большинстве оболочек, включая все оболочки в стиле Борна (вы отметили ).\в оболочкахработает в основном так же, как и в регулярных выражениях. ( $нет; он используется для различных расширений/замен оболочки, особенно расширения параметров).

Без кавычек или даже в двойных кавычках, \$указывает литерал $в оболочке, который затем передается в grepкак $, который grepинтерпретирует как метасимвол регулярного выражения. Заключение его в одинарные кавычки предотвращает это. В качестве альтернативы вы можете написать \\\$— или иногда просто \\$— но это сбивает с толку.

0
13.06.2016, 20:00
0 ответов

Теги

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