Grep регулярное выражение, чтобы найти слова в любом порядке - PullRequest
4 голосов
/ 06 мая 2011

Контекст: Я хочу найти определение класса в большом количестве файлов исходного кода, но не знаю точного имени.

Вопрос: Я знаю несколько слов, которые должны появиться в строке, которую я хочу найти, но я не знаю, в каком порядке они появятся. Есть ли быстрый способ найти несколько слов в любом порядке в одной строке?

Ответы [ 5 ]

5 голосов
/ 24 сентября 2011

Для ситуаций, когда вам нужно искать по большому количеству слов, вы можете использовать awk следующим образом:

awk "/word1/&&/word2/&&/word3/" *.c

(Если вы являетесь пользователем cygwin, команда gawk.)

1 голос
/ 06 мая 2011

Использование стандартного базового регулярного выражения рекурсивно сопоставляет, начиная с текущего каталога, любой файл .c с указанными словами (без учета регистра, bash flavor):

grep -r -i 'word1\|word2\|word3' ./*.c

Использованиестандартное расширенное регулярное выражение:

grep -r -i -E 'word1|word2|word3' ./*.c

Вы также можете использовать регулярное выражение perl:

grep -r -i -P 'word1|word2|word3' ./*.c
1 голос
/ 06 мая 2011

Если вы пытаетесь найти foo, bar и baz, вы можете просто сделать:

grep foo *.c | grep bar | grep baz

Это найдет все, что имеет все три в любом порядке. Вы можете использовать границы слов, если вы используете egrep, в противном случае это будет соответствовать подстрокам.

0 голосов
/ 21 июня 2017

Если вам нужно выполнить поиск с помощью одной команды grep (например, вы ищете несколько альтернативных шаблонов в stdin), вы можете использовать:

grep -e 'word1.*word2' -e 'word2.*word1' -e 'alternative-word'

Это найдет все, что имеет word1 и word2 в любом порядке, или альтернативное слово .

(Обратите внимание, что этот метод экспоненциально усложняется как числослов в произвольном порядке увеличивается.)

0 голосов
/ 06 мая 2011

Хотя это не точный ответ на ваш вопрос grep, но вы должны проверить команду "ctags" для генерации файла тегов из исходного кода.Для объектов исходного кода это должно помочь вам гораздо больше, чем простой grep.проверка: http://ctags.sourceforge.net/ctags.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...