Meg kell vágnom néhány fájlt, hogy lássam, melyek tartalmaznak egy bizonyos szót:
grep -l word *
Ezután meg kell vennem a fájlok listáját, hogy lássam, melyik tartalmaz egy másik szót. A legegyszerűbb módszer valószínűleg egy szkript írása lenne, de nem tudom, hogyan kell dolgozni.
Megjegyzések
Válasz
Feltételezve, hogy egyik fájlnév sem tartalmaz szóközt, egyetlen idézetet, dupla idézőjel vagy visszavágó karakter (vagy kezdje – GNU grep
betűvel), ezt megteheti:
grep -l word * | xargs grep word2
Xargs futtatja a második grep-et az első grep-ből származó fájlok felett.
GNU-val grep
/ xargs
vagy kompatibilis, megbízhatóbbá teheti:
grep -lZ word ./* | xargs -r0 grep word2
A -Z
használatával grep
kinyomtatja a fájlneveket NUL-elválasztva, így a xargs -0
fájlokkal együtt használható. A -r
opció a “>
kerüli a második grep
futtatását, ha az első grep
nem talál semmit.
Válasz
grep -l word1 $(grep -l word2 *)
vagy esetleg az ugyanazon a soron található két szó egyikére:
grep -w "word1\|word2" *
lásd itt
Válasz
Ha meg kell találnia egy szót tartalmazó fájlokat, majd ki kell szűrnie azokat a fájlokat, amelyek egy másik szót tartalmaznak, használhatja a következő parancssorozatot:
grep word * | awk -F ":" "{print $1}"|uniq | xargs grep word2
-
grep word *
– az összes “word” szót tartalmazó fájl megjelenik, a fájlnév első lesz a listában. -
awk -F ":" "{print $1}"
– csak az eredmények fájlnevét fogja kinyomtatni -
uniq
– meggyőződik arról, hogy a fájlnév nyomtatása legfeljebb egyszer. -
xargs grep word2
– ismét keresni fog a fájlok listáján.
Megjegyzések
- @don_crissti De a darabok kombinálása
grep -l word1 * | xargs -d'\n' grep -l word2
minden másra használható, kivéve az newline-ot, ami elég furcsa, szinte senki sem használja.
grep
? GNUgrep
? Linuxot, Solarist vagy BSD-t használ?