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
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, hagrep -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
grep -rl "text to find" "/usr/share"
fájlt használtam, és nagyon jól sikerült!