Milyen trükkel lehetne megoldani a következő dolgot?
Van egy eldugott mappában pár txt fájl. Szeretnék rákeresni egy szóra vagy szövegrészletre ezekben a fájlokban.
Ezt megtudom oldani a grep -i "text" /path/*.txt paranccsal.
Viszont ekkor kiírja a teljes útvonalat ami zavaró.
Ha a grep -ih akkor nem ír ki semmilyen útvonalat, így nem tudom hogy az adott szövegrészletet melyik fájlban találta.
A find-del sem jutottam előrébb. Sőt.
A kívánatos az lenne ha megjelenítené a fájlt IS és a megtalált szöveget.
példa:
/path/path1/path2/path3/minta1.txt
/path/path1/path2/path3/minta2.txt
/path/path1/path2/path3/minta3.txt
/path/path1/path2/path3/minta4.txt
Keresek szöveget: "ákombákom"
Ez a szöveg két fájlban is megtalálható.
grep -i "ákombákom" /path/path1/path2/path3/*.txt
/path/path1/path2/path3/minta2.txt: ákombákom a szélben
/path/path1/path2/path3/minta3.txt: ákombákom a viharban
Így szeretném megkapni az eredményt:
minta2.txt: ákombákom a szélben
minta3.txt: ákombákom a viharban
Csak a greppel mintha ezt nem tudnám elérni. Persze a "-c" kapcsolóval meg csak azt kapom ahol a kérdéses szöveg található, és hogy hányszor szerepel.
grep -c "ákombákom" /path/path1/path2/path3/*.txt
/path/path1/path2/path3/minta2.txt:1
/path/path1/path2/path3/minta3.txt:1
awk-kal meg lehet spékelni, vagy van jobb megoldás is?
grep -i "ákombákom" /path/path1/path2/path3/*.txt | awk -F'/' '{printf $5}'
Bár ebben az esetben elveszti a színeket.
awk nélküli keresés esetén az én esetemben az útvonal lila, a keresett szöveg piros színt kap.
Ezt tipikusan akkor sikerül elérnem ha belépek a kérdéses mappába és ott adom ki csak a grep parancsot.
cd /path/path1/path2/path3/
grep -i "ákombákom" *.txt
- 299 megtekintés
Hozzászólások
cd /path/path1/path2/path3/
grep -i "ákombákom" *.txt
(tobbet esszel mint awk-val:))
> Ezt tipikusan akkor sikerül elérnem ha belépek a kérdéses mappába és ott adom ki csak a grep parancsot.
es akkor ez miert nem jo?
- A hozzászóláshoz be kell jelentkezni
Ezt esetleg meg lehetne fejelni azzal, hogy ezt a 2 parancsot ( ) közé teszed, ekkor minden egy új alshellben fut le, de mikor befejeződik, akkor újfent az eredeti környezetben találod magad (azaz nem kell pl. visszalépned "cd -" segítségével.)
- A hozzászóláshoz be kell jelentkezni
Bár ebben az esetben elveszti a színeket.
grep --color=always
Vagy imigy, egyben az egesz.
grep --color=always -i "text" /path/*.txt | sed -e 's|^/.*/||g'
Ez sem teljesen tokeletes, mert a root-ban levo fileok eseten nem vagja ki a /-t, de... de talan jo lesz :)
- A hozzászóláshoz be kell jelentkezni
Érdekes. Ha beírom --color=always akkor színes ugyan, de kiírja a teljes útvonalat. Viszont ha maradok az awknál és ott használom a --color=always kiegészítést akkor az útvonal ugyan nem lesz színes a de a keresett szöveg igen. Ez már megfelel.
- A hozzászóláshoz be kell jelentkezni
A --color=always az csak szinez. A fenti peldaban az utanakovetkezo sed -e '...' roviditi le az utvonalat csak a filenevekre. Kb mint a `basename` parancs.
- A hozzászóláshoz be kell jelentkezni