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.


$config[zx-auto] not found$config[zx-overlay] not found