Я хочу grep всех строк, содержащих слова, которые начинаются с "H" и заканчиваются на "d". Как бы я это сделал? Я обнаружил, что grep ^ H даст мне H для каждой строки.

2 ответа2

2

Я бы попробовал: /^H.*d$/ . ^ Начинается с и заканчивается $. . * Соответствует чему угодно.

2

Как вы определяете "слова"?

Если они разделены пробелами:

grep '\<H[^ ]*d\>' ...

должен сделать это. \< и \> соответствуют началу и концу слова соответственно. [^ ]* соответствует последовательности из нуля или более непробельных символов.

Более того, как правило, если ваш grep поддерживает это (GNU grep поддерживает):

grep '\<H[^[:space:]*d\>

находит слова, разделенные пробелами: табуляция, новая строка, вертикальная табуляция, подача формы, возврат каретки и пробел.

Я предполагаю, что «строки, содержащие слово» означает, что вы хотите, чтобы "foo H123d bar" соответствовал. Если каждая строка содержит целое слово, замените \< на ^ и \> на $ .

РЕДАКТИРОВАТЬ: Это может быть не на 100% правильно. \< и \> определяют "слово" как непустую последовательность букв, цифр и подчеркиваний. Определите, что именно вы подразумеваете под словом, и я постараюсь уточнить свой ответ. В "*H*d*" H*d "слово"?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .