私はmacOSを使用しており、grep
(または同様のツール)を使用して、コードベース内の特定のパターンの一意のオカレンスを見つけたいと考えています。たとえば、JavaScriptですべてのconsole.somemethod()
呼び出しを見つけるために、私は次のことを考案しました。
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
古い質問を再ハッシュしている場合はお詫びします!
正規表現で-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にサンプル行を配置しました。
Uniqの発生に制限するには:
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