Почему это регулярное выражение не работает? - PullRequest
0 голосов
/ 24 августа 2009

регулярное выражение:

^ *x *\=.*$   

означает «соответствует литералу x, которому предшествует произвольное количество пробелов, затем произвольное количество пробелов, затем знак равенства и затем что-нибудь до конца строки». Sed был вызван как:

sed -r -e 's|^ *x *\=.*$||g' file

Однако он не находит ни одного совпадения, хотя должен. Что не так с регулярным выражением?

Всем: спасибо за ответы и усилия! Кажется, что проблема была во вкладках, присутствующих во входном файле, которые НЕ соответствуют спецификатору пробела ' '. Однако решение с \s работает независимо от существующих вкладок!

Ответы [ 3 ]

5 голосов
/ 24 августа 2009
^\s*x\s*=.*$

Может быть, вы должны избежать некоторых символов, выяснить это один за другим.

Кстати: теги Regex должны действительно иметь три требования:

что такое строка ввода, какая строка вывода и ваша платформа / язык.

0 голосов
/ 24 августа 2009

sed обрабатывает файл построчно и выполняет данную программу для каждого. Самая простая программа, которая делает то, что вы хотите, это

sed -re '/^ *x *=.*$/!d' file
  • "/^ *x *=.*$/" выбирает каждую строку, соответствующую шаблону.
  • "!" отрицает результат.
  • "d" удаляет строку.

sed по умолчанию напечатает все строки, если не указано иное. Это эффективно печатает линии, которые соответствуют шаблону.

Один альтернативный способ написать это:

sed -rne '/^ *x *=.*$/p' file
  • "/^ *x *=.*$/" выбирает каждую строку, соответствующую шаблону.
  • "p" печатает строку.

Разница в том, что я использовал переключатель "-n", чтобы отключить автоматическую печать строк, и вместо этого печатать только выбранные строки.

Вы также можете использовать «grep» для этой задачи:

grep -E '^ *x *=.*$' file
0 голосов
/ 24 августа 2009

или, может быть, '^[ ]*x[ ]*='. Это немного более совместимо, но не будет соответствовать вкладкам или тому подобное. И, если вам не нужны группы, зачем беспокоиться об остальной части строки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...