Szeretném rekurzívan és egyedileg felsorolni azokat a fájlokat, amelyek az adott szót tartalmazzák.

Példa : A “check” szó ellenőrzése, általában a grep

$ grep check * -R 

De mivel sokszor előfordul ez a szó, sok kimenetet kapok. Tehát csak fel kell sorolnom azokat a fájlneveket, amelyek tartalmazzák az adott keresőszót. Gondolom, néhány trükk a find és a xargs használatával elegendő lenne itt, de nem biztos.

Van valami ötleted?

Válasz

Használja a -l vagy --files-with-matches opció, amelyet a következőképpen dokumentálnak:

A normál kimenet elnyomása; ehelyett nyomtassa ki minden olyan bemeneti fájl nevét, amelyből a kimenetet általában kinyomtatták volna. A szkennelés az első mérkőzésen leáll. (<

a POSIX határozza meg.)

Tehát példaként a következőket használhatja:

$ grep check * -lR 

Megjegyzések

  • Az MSYS-en is működik. Nagyszerű!
  • A grep -rl "text to find" "/usr/share" fájlt használtam, és nagyon jól sikerült!

Válasz

find . -type f -exec grep -l check {} + 

Valószínűleg nem akarja használni a -R beállítást, amely a GNU modern verzióival grep a szimpla linkeket követi a könyvtárak csökkenése során. Használja a -r opciót, amely a 2.12 verzió óta (2012. április) már nem követi a szimpla linkeket.

Ha a grep nem a GNU, vagy régebbi, mint a 2.12 verzió, vagy ha kódjára van szükség, hogy hordozhassa a nem vérző szélű GNU rendszereket, használja az find fenti parancs.

Egyébként megteheti:

grep -rl check . 

Ne használja a * (mivel ez kihagyná a rejtett fájlokat az aktuális könyvtárban (és csak az aktuális könyvtárban), és problémákat okozna azoknál a fájloknál, amelyek neve - -vel kezdődik), kerülje az átadást lehetőségek érvek után, mivel ez nem garantálja a környezettől függően működik, és nem hordozható.

Válasz

Próbálja ki:

find . -type f | xargs grep -c check $1 | grep -v ":0" 

A grep zászlókkal kapcsolatban …

-c adjon vissza egy fájlnevet, amelyet követ: és egy szám, amely jelzi, hogy a keresési karakterlánc hányszor jelenik meg az adott fájlban.

-v az első grep keresés, szűrés a nulla eredménnyel rendelkező fájlok után, és csak a nulla eredményt nem tartalmazó fájlok kinyomtatása.

Megjegyzések

  • Ez hamis negatív eredményt ad, ha van fájlja (i) vagy rendezője (i), amelyek neve :0 -et tartalmaz. ' jobb, ha grep -v ':0$'. Még ez is megfojtja az új sor (oka) t tartalmazó utóneveket.

Válasz

grep -lR "text-to-find" <where-to-find> is jól működik.

pl. grep -lR "NAVIGATE" . ahol a NAVIGATE szót megtaláljuk a . az aktuális könyvtárban.

Válasz

grep -rin “whatToFind” locationToFInd

pl. $ grep -rin “vihaan”.

rekurzív módon megkeresi és felsorolja a fájlneveket és a megfelelő sorokat, amelyekben “vihaan” van, “.” az aktuális könyvtárra utal.

Válasz

find . -type f | grep "keyword" * 

keresés az aktuális könyvtárban. A gyökérből történő kereséshez adja meg a / elemet a .

Válasz

 grep -rli trim \` find . -name *.q \` 

Adja meg a .q fájlok listáját, amely a trim

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük