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

  • Melyik grep? GNU grep? Linuxot, Solarist vagy BSD-t használ?
  • I ' m Linuxot használ.

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.

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