Я хочу grep всех строк, содержащих слова, которые начинаются с "H" и заканчиваются на "d". Как бы я это сделал? Я обнаружил, что grep ^ H даст мне H для каждой строки.
2 ответа
Я бы попробовал: /^H.*d$/ . ^ Начинается с и заканчивается $. . * Соответствует чему угодно.
Как вы определяете "слова"?
Если они разделены пробелами:
grep '\<H[^ ]*d\>' ...
должен сделать это. \< и \> соответствуют началу и концу слова соответственно. [^ ]* соответствует последовательности из нуля или более непробельных символов.
Более того, как правило, если ваш grep поддерживает это (GNU grep поддерживает):
grep '\<H[^[:space:]*d\>
находит слова, разделенные пробелами: табуляция, новая строка, вертикальная табуляция, подача формы, возврат каретки и пробел.
Я предполагаю, что «строки, содержащие слово» означает, что вы хотите, чтобы "foo H123d bar" соответствовал.  Если каждая строка содержит целое слово, замените \< на ^ и \> на $ .
РЕДАКТИРОВАТЬ: Это может быть не на 100% правильно. \< и \> определяют "слово" как непустую последовательность букв, цифр и подчеркиваний.  Определите, что именно вы подразумеваете под словом, и я постараюсь уточнить свой ответ.  В "*H*d*" H*d "слово"?
