grep több mintára

Sziasztok!
PHP-ból kellene egy shell parancsot gyártanom, ami több feltételeknek megfelelő fájlokat keres egy adott könyvtárban
Tudom, hogy megoldható lenne annyi lépésben, amennyi feltétel szerint keresek, de én egy lépésben szeretném.
Nahh magyarul ezt szeretném:
Egy adott könyvtárban szeretném látni az összes olyan file-t, amiben szerepel az
a=1
és a
b=2
és a
c=3
sor.
A grep-pel az a baj, hogy csak 2 feltételig műxik jól így:
grep -l "a=1" `grep -l "b=2" path/to/dir`
Ez már nem megy:
grep -l "a=1" `grep -l "b=2" `grep "c=3" /path/to/dir``
Hogyan lehetne rávenni a rendszert, hogy több egymásba ágyazott parancsot is kezeljen le?

Előre is köszi:
hemu

Hozzászólások

Védd le \-sel a legbelső ` jeleket.

---------------
"I do not know with what weapons World War III will be fought, but World War IV will be fought with sticks and stones." - A. Einstein

Mármint mindegyiket, ami az első ` jelen belül van?
Megpróbáltam és nem akarja az igazságot.
Így nézett ki a parancs:
grep -l "adatok\['VGA foglalat'\] = 'AGP8X'" `grep -l "adatok\['I ntegrált VGA'\] = 'Nincs'" \`grep -l "adatok\['Processzor foglalat'\] = 'Socket 478'" /path/*\``

Szerk : a lenyeget lentebb mar irtak.

Ez esetben inkabb $() Pl.
`alma`korte`dio`- lehet ugy ertelmezni hogy $(alma)korte$(dio) de lehet ugy is,
hogy $(alma$(korte)dio). Ezert jobb a egymasba agyazas eseten a $().
A shell az `alma`korte`dio`-t az elsonek veszi, mig ezt `alma\`korte\`dio` a masodiknak, de meg egy szint es mar a csuda se latja at.
Amugy mindegyik a kurrens shellben hajtodik vegre, nincs subshell.
De biza, mindkettonel van subshell. :P
==
`Have some wine,' the March Hare said in an encouraging tone.
Alice looked all round the table, but there was nothing on it but tea.

Szerintem fogalmazd meg reguláris kifejezéssel. Valahogy így:

grep -e '^(a=1|a=2|a=3)'

Mondjuk ez így érzésre rossz, de valami hasonló.

Ezzel az a baj, hogy nekem olyan file-ok kellenek, amikben mindhárom sor szerepel.
Szóval olyan file-okat keresek, amiben szerepel az a=1 és a b=2 és a c=3 is.
Gondolom - lehet, hogy rosszul - a grep-pel lehet egy sorra keresni, de a találatokat tovább kell grep-elni a második, majd harmadik mintára, hogy végül csak azok a file-ok maradjanak meg, amik tartalmazzák mindhárom sort.

awk-t használnám:
awk '/a=1/ {va=1;}; /b=2/ {vb=1;}; /c=3/ {vc=1}; END {if((va==1)&&(vb==1)&&(vc==1)) printf("%s\n",FILENAME); }'
vagy valami ilyesmi, nem próbáltam ki

Ágyúval verébre módszereket próbálsz:

grep -e 'a=1' file | grep -e 'a=2' | grep -e 'a=3'

annyi grep egy csőben, ahány feltételed van.

ha a backticket akarod kiváltani, akkor azt így lehet:

grep -l "a=1" $(grep -l "b=2" $(grep "c=3" /path/to/dir))

Úgy nézem ez a tipp még nem volt:

grep -l a=1 * | xargs -d \\n -- grep -l b=2 | xargs -d \\n -- grep -l c=3

:-)

--
hup.user.js

Szeritem rossz celt tuzol ki magad ele. Ha PHP, ird php-ben. Van file kezeles, van regexp, mi kell meg? Lehet persze kicsit koltsegesebben shellben is, de 1) lassab.
2) kevesbe hordozhato 3) nem egyszerubb.
==
`Have some wine,' the March Hare said in an encouraging tone.
Alice looked all round the table, but there was nothing on it but tea.

Lehet, hogy nem jó a cél, de jelen esetben ez tűnt "olcsóbbnak".
Jópár php file-ban kell keresgélni, amik adatbázisadatok statikus "klónjai".
Valóban kevésbé hordozható, de itt nem is szükséges.
Nekem nem tűnik lassabbnak, mint a php-s sőt.
Mivel a megoldás fele már megvolt fejben, nem akartam átdolgozni az egészet file kezelésre.
Így végül 15 perc alatt meglett az egyszerű megoldás, hogy a ` karaktert mire cseréljem a parancsban és működik. Ha a php-val dolgoztatom fel a fileokat egyenként, az azért megdobja még egy kis idővel az egészet - gondolom.