Tekstiotsing
Greph tekstirežiim otsib reahaaval baite läbi läbitud failipuu. See on greph CLI ja Greph::searchText() fassaadi vaikerežiim. Väljund järgib kanoonilist file:line:content vormingut, mida grep, ripgrep ja enamik redaktorite integratsioone suudavad parsida.
Kiired näited
# Regex search across the current directory
./vendor/bin/greph "function\s+\w+"
# Fixed-string search across src/
./vendor/bin/greph -F "function" src
# Case-insensitive whole-word search
./vendor/bin/greph -F -i -w "function" src
# Two lines of context around each match
./vendor/bin/greph -F -C 2 "TODO" src
# Stop after the first three matches per file
./vendor/bin/greph -F -m 3 "TODO" src
# Files that contain the pattern
./vendor/bin/greph -F -l "TODO" src
# Files that do not contain the pattern
./vendor/bin/greph -F -L "TODO" src
# Count matches per file
./vendor/bin/greph -F -c "TODO" src
# Inverted match
./vendor/bin/greph -F -v "TODO" src/notes.txt
Mustrid
Vaikimisi käsitletakse mustrit PCRE2 regulaaravaldisena. Mootori taga on PHP funktsioonid preg_*, seega vastab süntaks PHP PCRE viitele.
Lülitage regulaaravaldiste mootor -F abil välja, et käsitleda mustrit sõnasõnalise baidijadana. Fikseeritud stringi režiim on kiireim: see kasutab sobitamiseks strpos() ega käivita PCRE2 kompileerimisetappi.
-i muudab mõlemad režiimid tõstutundetuks. -w lisab vaste mõlemale poolele terve sõna piirid.
Failide filtreerimine
Greph läbib enne otsimist failipuu. Läbikäija on sama, mida kasutavad AST-režiim ja indekseeritud režiim, seega kehtivad kõikjal samad filtreerimislipud.
| Lipp | Mõju |
|---|---|
--type NAME |
Kaasa ainult failid, mis vastavad nimetatud tüübialiasele (php, js, md, ...) |
--type-not NAME |
Jäta välja failid, mis vastavad nimetatud tüübialiasele |
--glob GLOB |
Kaasa ainult failid, mille teed vastavad mustrile GLOB. Võib korrata. |
--no-ignore |
Eira .gitignore ja .grephignore |
--hidden |
Kaasa peidetud failid |
Läbikäija järgib vaikimisi .gitignore ja .grephignore, jätab vahele binaarfailid (tuvastab need esimese 512 baidi nullbaitide põhjal) ning piirab failisuuruse 10 MiB-ga. Mõlemat piirangut saab seadistada WalkOptions kaudu.
Sisseehitatud tüübialiaste täieliku loendi leiate siit: API / FileTypeFilter.
Kontekst, loendused ja ainult failide režiimid
# Two lines before and after each match
./vendor/bin/greph -F -C 2 "needle" src
# Two lines after, no lines before
./vendor/bin/greph -F -A 2 "needle" src
# Two lines before, no lines after
./vendor/bin/greph -F -B 2 "needle" src
# Count matches per file
./vendor/bin/greph -F -c "needle" src
# List matching files only
./vendor/bin/greph -F -l "needle" src
# List non-matching files only
./vendor/bin/greph -F -L "needle" src
-c, -l ja -L jätavad vormindaja vahele, et vältida kõigi ridade mällu laadimist. Need on sobivad režiimid päringutele „kui palju” ja „kus”.
Paralleelsed skannimised
Edastage -j N, et jagada skannimine N töölõime vahel. Greph kasutab töölõimede kogumi jaoks pcntl_fork() ja läheb üle ühe protsessiga täitmisele, kui ext-pcntl pole saadaval.
./vendor/bin/greph -F -j 8 "function" src
Fassaad hindab failide arvu, režiimi ja mustri kuju põhjal, kas paralleeltäitmine on lisakulu väärt. Lävendist allpool kasutatakse üht protsessi. Heuristikate kohta leiate lisateavet jaotisest Täpsemalt / Paralleeltöölised.
JSON-väljund
--json väljastab struktureeritud andmestiku, mida järgmised tööriistad saavad parsida ilma grep-vormingut ekraanilt kraapimata:
./vendor/bin/greph --json -F "function" src
[
{
"file": "src/Greph.php",
"matches": [
{
"line": 31,
"column": 1,
"content": "final class Greph",
"matched_text": "function",
"captures": []
}
]
}
]
rg ümbris väljastab selle asemel ripgrep-sündmuste kujul JSON. Kasutage seda, kui olemasolev tarbija ootab skeemi ripgrep.
Programmipõhine kasutus
use Greph\Greph;
use Greph\Text\TextSearchOptions;
$results = Greph::searchText(
'function',
'src',
new TextSearchOptions(
fixedString: true,
caseInsensitive: true,
beforeContext: 1,
afterContext: 1,
jobs: 4,
),
);
foreach ($results as $file) {
foreach ($file->matches as $match) {
echo "{$file->file}:{$match->line}:{$match->content}\n";
}
}
Tulemuseobjektide dokumentatsioon on jaotises API / Tulemuseobjektid.
Kuidas see töötab
Tekstimootoril on kaks töövoogu:
- Sõnasõnaline töövoog: kui
-Fon määratud, otsitaksestrpos()abil 64 KiB puhvriga lugejast ja reanumbrite jaoks jälgitakse reavahetusi. Regulaaravaldist ei kompileerita. - Regulaaravaldise töövoog: kui
-Fpole määratud, eraldab Greph mustrist väikese PCRE-laadse analüsaatori (Greph\Text\LiteralExtractor) abil sõnasõnalised alamstringid ja kasutab neidstrpos()eelfiltrina. Eelfiltri läbinud ridu võrreldakse seejärel kompileeritud PCRE2 mustriga, mille JIT on lubatud.
Mõlemad töövood kasutavad sisend-väljundiks sama BufferedReader. Lugeja loeb fgets()-kaupa ridade kaupa lugemise asemel 64 KiB kaupa, mis vähendab suurte failide puhul süsteemikutsete arvu märkimisväärselt.
Korduvate töökoormuste korral asendab indekseeritud tekstirežiim puhverdatud lugeja soojendatud trigrammi- ja identifikaatorite postituste andmebaasiga ning jätab enamiku faile täielikult vahele.