Перехресна безпечна відповідь (включаючи windows minGW?)
grep -h "[[:alpha:]]*th[[:alpha:]]*" 'filename' | tr ' ' '\n' | grep -h "[[:alpha:]]*th[[:alpha:]]*"
Якщо ви використовуєте старіші версії grep (наприклад, 2.4.2), які не містять опцію -o. Скористайтеся описаним вище. Інше скористайтеся простішою для підтримки версії нижче.
Безпечна відповідь на перехресний розподіл Linux
grep -oh "[[:alpha:]]*th[[:alpha:]]*" 'filename'
Для підсумків -ohвиводиться відповідність регулярного вираження вмісту файлу (а не його імені файлу), як і те, як ви б очікували, що регулярний вираз буде працювати у vim / тощо ... Яке слово чи регулярний вираз ви б шукали тоді ви! Поки ви залишаєтесь POSIX, а не синтаксисом perl (див. Нижче)
Більше з посібника з grep
-o Print each match, but only the match, not the entire line.
-h Never print filename headers (i.e. filenames) with output lines.
-w The expression is searched for as a word (as if surrounded by
`[[:<:]]' and `[[:>:]]';
Причина, чому оригінальна відповідь працює не для всіх
Використання \wзалежить від платформи до платформи, оскільки це розширений синтаксис "perl". Таким чином, використовується програма Grep, яка обмежена роботою з класами символів POSIX, [[:alpha:]]а не її еквівалент perl \w. Додаткову інформацію див. На сторінці Вікіпедії щодо регулярного вираження
Зрештою, відповідь POSIX вище буде набагато надійнішою незалежно від платформи (будучи оригіналом) для grep
Що стосується підтримки grep без опції -o, перший grep виводить відповідні рядки, tr розбиває пробіли на нові рядки, остаточний grep фільтрує лише для відповідних рядків.
(PS: Я знаю, що більшість платформ до цього часу були б виправлені \ w .... але завжди є такі, які відстають)
Заслуга за вирішення "-o" з відповіді @AdamRosenfield