Grep на macOS: найдите уникальные вхождения группы захвата в регулярном выражении
Я нахожусь на macOS и хотел бы начать использовать grep
(или аналогичный инструмент), чтобы найти уникальные вхождения определенного шаблона в кодовой базе. Например, для поиска всех console.somemethod()
звонки в JavaScript, которые я разработал:
grep -oiER "console\.([a-z]+)\(" . | sort -u
Но это дает мне результаты в виде:
./tools/svg-inject/node_modules/with/node_modules/acorn/src/bin/acorn.js:console.log(
./tools/svg-inject/node_modules/wordwrap/README.markdown:console.log(
./tools/svg-inject/node_modules/wordwrap/example/center.js:console.log(
./tools/svg-inject/node_modules/wordwrap/example/meat.js:console.log(
./tools/svg-inject/node_modules/yargs/README.md:console.dir(
./tools/svg-inject/node_modules/yargs/README.md:console.log(
./tools/svg-inject/node_modules/yargs/index.js:console.log(
./tools/svg-inject/node_modules/yargs/lib/usage.js:console.error(
./tools/svg-inject/node_modules/yargs/lib/usage.js:console.log(
./webpack.config.js:console.info(
Console.sendTo(
console.error(
console.log(
console.markTimeline(
console.reactStackEnd(
console.timeEnd(
console.trace(
console.warn(
Я хотел бы ограничить это уникальными матчами ([a-z]+)
только группа:
info
sendTo
error
log
markTimeline
reactStackEnd
timeEnd
trace
warn
Извиняюсь, если я перефразирую старый вопрос!
1 ответ
Использовать -P
опция для регулярного выражения Perl с \K
директива в регулярном выражении, которая исключит совпадение предыдущей строковой части из результата:
grep -ioP "console\.\K[a-z]+" file.txt
log
log
log
log
dir
log
log
error
log
info
sendTo
error
log
markTimeline
reactStackEnd
timeEnd
trace
warn
Я поместил ваш пример строки в file.txt для тестирования.
Чтобы ограничиться уникальным вхождением:
grep -ioP "console\.\K[a-z]+" file.txt | sort -u
dir
error
info
log
markTimeline
reactStackEnd
sendTo
timeEnd
trace
warn
Другое решение -P
опция была удалена версия MacOS 10.8
Если у вас установлен Perl:
perl -nle 'print $1 if /console\.([a-z]+)/' file.txt | sort -u
dir
error
info
log
mark
react
time
trace
warn
Для работы со всеми файлами в каталоге:
perl -nle 'print $1 if /console\.([a-z]+)/' * | sort -u