Может ли grep показывать только те слова, которые соответствуют шаблону поиска? - PullRequest
578 голосов
/ 10 октября 2009

Есть ли способ заставить grep выводить "слова" из файлов, которые соответствуют поисковому выражению?

Если я хочу найти все экземпляры, скажем, «th» в нескольких файлах, я могу сделать:

grep "th" *

но вывод будет что-то вроде (жирным шрифтом от меня);

some-text-file : <b>the</b> cat sat on <b>the</b> mat  
some-other-text-file : <b>the</b> quick brown fox  
yet-another-text-file : i hope <b>this</b> explains it <b>thoroughly</b> 

То, что я хочу вывести, используя тот же поиск:

the
the
the
this
thoroughly

Возможно ли это с помощью grep? Или используя другую комбинацию инструментов?

Ответы [ 14 ]

3 голосов
/ 14 ноября 2009

Вы также можете попробовать pcregrep . В grep также есть опция -w, но в некоторых случаях она не работает должным образом.

Из Википедия :

cat fruitlist.txt
apple
apples
pineapple
apple-
apple-fruit
fruit-apple

grep -w apple fruitlist.txt
apple
apple-
apple-fruit
fruit-apple
0 голосов
/ 07 ноября 2018

ripgrep

Вот пример использования ripgrep:

rg -o "(\w+)?th(\w+)?"

Он будет соответствовать всем словам, совпадающим с th.

0 голосов
/ 29 мая 2012
$ grep -w

Выдержка из справочной страницы grep:

-w: Выберите только те строки, которые содержат совпадения, образующие целые слова. Тест состоит в том, что соответствующая подстрока должна быть либо в начале строки, либо предшествовать не состоящему из слов символу.

0 голосов
/ 10 октября 2009

Вы можете перенаправить вывод grep в Perl следующим образом:

grep "th" * | perl -n -e'while(/(\w*th\w*)/g) {print "$1\n"}'
...