Требуется регулярное выражение, чтобы найти все слова, начинающиеся с буквы и содержащие две буквы

Мне нужно найти слово пляж, как мне указать, что оно начинается с буквы b и содержит ch? Я пробовал использовать grep '^ s. * Ch', но он выводит строки, содержащие его, и мне просто нужно слово.

0
26.11.2018, 01:35
2 ответа
$ grep -o '\<b[a-z]*ch[a-z]*' file

При этом будут извлечены все слова, начинающиеся с b и содержащие ch . Два [a-z] * будут соответствовать любому количеству строчных букв. \ < гарантирует, что b будет первой буквой в слове.

Параметр -o для grep заставит его возвращать только согласованную строку, а не всю строку.

Альтернатива:

$ grep -o '\<b[[:lower:]]*ch[[:lower:]]*' file

Ваш шаблон, ^ s. * Ch будет соответствовать любой строке , которая начинается с s и содержит ch ] где-нибудь еще на той же строке.

1
28.01.2020, 02:34

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

Итак, вы хотите изменить это на что-то, что соответствует только символам, составляющим слово. Как именно вы это сделаете, зависит от того, какую реализацию регулярных выражений вы используете, и от того, хотите ли вы рассматривать символы из разных алфавитов. Один разумно переносимый способ — использовать [[:alpha:]]*

. Синтаксис, который будет соответствовать началу слова, также зависит от реализации. Для grep вы можете использовать \<.

Чтобы просто получить слово, есть две опции grep, которые могут помочь: -o и --color. Первый просто выводит то, что совпадает, а второй выводит всю строку с выделенным совпадением.

Таким образом, вы, вероятно, захотите

grep -o '\<b[[:alpha:]]*ch' filename
1
28.01.2020, 02:34

Теги

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