Mintakeresés a Java-ban található Grep segítségével
1. Áttekintés
Ebben az oktatóanyagban - megtanuljuk, hogyan kell keressen mintát egy adott fájlban - Java és harmadik fél könyvtárak, például Unix4J és Grep4J használata.
2. Háttér
A Unix-nak van egy hatékony parancsa grep - ami azt jelenti globális reguláris kifejezés nyomtatása “. Megkeresi a mintát vagy a reguláris kifejezést egy adott fájlkészleten belül.
A grep paranccsal nulla vagy több opció használható a keresési eredmények gazdagítására, amelyet a következő szakaszban részletezünk.
Ha Windows rendszert használ, telepítheti a bash-t az itteni bejegyzésben említettek szerint.
3. Az unix4j könyvtárral
Először nézzük meg, hogyan használhatjuk az Unix4J könyvtárat a fájl mintájának megfogására.
A következő példában - megnézzük, hogyan lehet lefordítani a Unix grep parancsokat a Java-ban.
3.1. Konfiguráció készítése
Adja hozzá a következő függőséget a pom.xml vagy épít.gradle:
org.unix4j unix4j-parancs 0.4
3.2. Példa a Greppel
Grep minta Unix-ban:
grep "NINETEEN" szótár.txt
A Java megfelelője:
@Test public void whenGrepWithSimpleString_thenCorrect () {int várhatóLineCount = 4; Fájlfájl = új Fájl ("szótár.txt"); Sorok felsorolása = Unix4j.grep ("NINETEEN", fájl) .toLineList (); assertEquals (várhatóLineCount, lines.size ()); }
Egy másik példa az, ahol fordított szöveges keresést használhatunk egy fájlban. Itt van ennek Unix verziója:
grep -v "NINETEEN" szótár.txt
Itt van a fenti parancs Java verziója:
@Test public void whenInverseGrepWithSimpleString_thenCorrect () {int várhatóLineCount = 178687; Fájlfájl = új Fájl ("szótár.txt"); Sorok felsorolása = Unix4j.grep (Grep.Options.v, "NINETEEN", fájl). toLineList (); assertEquals (várhatóLineCount, lines.size ()); }
Megnézhetjük, hogyan használhatjuk a reguláris kifejezést egy minta keresésére egy fájlban. Itt van a Unix verzió az egész fájlban található összes reguláris kifejezés mintájának megszámolásához:
grep -c ". *? Kilenc. *?" szótár.txt
Itt van a fenti parancs Java verziója:
@Test public void whenGrepWithRegex_thenCorrect () {int várhatóLineCount = 151; Fájlfájl = új Fájl ("szótár.txt"); String patternCount = Unix4j.grep (Grep.Options.c, ". *? NINE. *?", Fájl). cut (CutOption.fields, ":", 1) .toStringResult (); assertEquals (várhatóLineCount, patternCount); }
4. A Grep4J-vel
Következő - lássuk, hogyan használhatjuk a Grep4J könyvtárat mintának megfogásához egy fájlban, amely helyileg vagy valahol távoli helyen található.
A következő példában - megnézzük, hogyan lehet lefordítani a Unix grep parancsokat a Java-ban.
4.1. Konfiguráció készítése
Adja hozzá a következő függőséget a pom.xml vagy épít.gradle:
com.googlecode.grep4j grep4j 1.8.7
4.2. Grep példák
Minta grep Java nyelven, azaz ekvivalens:
grep "NINETEEN" szótár.txt
Itt van a parancs Java verziója:
@Test public void givenLocalFile_whenGrepWithSimpleString_thenCorrect () {int várhatóLineCount = 4; Profil localProfile = ProfileBuilder.newBuilder (). név ("szótár.txt"). filePath ("."). onLocalhost (). build (); GrepResults results = Grep4j.grep (Grep4j.constantExpression ("NINETEEN"), localProfile); assertEquals (várhatóLineCount, results.totalLines ()); }
Egy másik példa az, ahol fordított szöveges keresést használhatunk egy fájlban. Itt van ennek Unix verziója:
grep -v "NINETEEN" szótár.txt
És itt van a Java verzió:
@Test public void givenRemoteFile_whenInverseGrepWithSimpleString_thenCorrect () {int várhatóLineCount = 178687; Profil remoteProfile = ProfileBuilder.newBuilder (). név ("szótár.txt"). filePath ("."). filePath ("/ tmp / dictionary.txt"). onRemotehost ("172.168.192.1"). hitelesítő adatok ("user", "pass"). build (); GrepResults results = Grep4j.grep (Grep4j.constantExpression ("NINETEEN"), remoteProfile, Option.invertMatch ()); assertEquals (várhatóLineCount, results.totalLines ()); }
Lássuk, hogyan használhatjuk a reguláris kifejezést egy minta keresésére egy fájlban. Itt van a Unix verzió az egész fájlban található összes reguláris kifejezés mintájának megszámolásához:
grep -c ". *? Kilenc. *?" szótár.txt
Itt van a Java verzió:
@Test public void givenLocalFile_whenGrepWithRegex_thenCorrect () {int várhatóLineCount = 151; Profil localProfile = ProfileBuilder.newBuilder (). név ("szótár.txt"). filePath ("."). onLocalhost (). build (); GrepResults results = Grep4j.grep (Grep4j. regularExpression (". *? NINE. *?"), LocalProfile, Option.countMatches ()); assertEquals (várhatóLineCount, results.totalLines ()); }
5. Következtetés
Ebben a gyors bemutatóban illusztráltuk a minta keresését egy adott fájlban Grep4j és Unix4J.
Ezeknek a példáknak a megvalósítása megtalálható a GitHub projektben - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.
Végül természetesen elvégezheti a grep-szerű funkcionalitás néhány alapját a JDK regex funkciójának használatával is.