Я хочу 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
"слово"?