Newsgroup: it.comp.os.linux.sys
Titolo: (il)logica dei pattern di grep

ciao a tutti.
alcuni giorni fa sono rimasto un po' perplesso sul funzionamento di una 
opzione di "grep" (devo dire che non e' la prima volta).
Chiaramente il subject e' ironico e la logica ci deve essere.
Esempio pratico: ps -ef | grep [i]netd
il risultato e' chiarissimo, se si tolgono le parentesi quadre si 
capisce la differenza.
Ma non capisco la logica, poiche' funziona anche se scrivo cosi:
ps -ef | grep i[n]etd
oppure
ps -ef | grep in[e]td
eccetera
boh.
Ciao
Massimiliano.

 Esempio pratico: ps -ef | grep [i]netd
[ e ] rachiudono una serie di caratteri su cui di solito si applica
un qualche modificatore (* + ? ^ | et similia).
Dato che tu non hai indicato NESSUN modificatore ed un solo carattere,
le [] non fanno assolutamente niente. Quindi [i]netd o inetd sono
esattamente identici.
Esempio che funziona:
ps -ef | grep [k\|sys]logd
Nota che bisogna "escapare" la pipe.
Davide
-- 
kill -9 them all, let reboot -rf now sort them out
--Peter Gutmann

 No. Nota la differenza
E dove sarebbe la differenza?
Davide
-- 
A Linux machine! because a 486 is a terrible thing to waste!

 la _tua_ richiesta di grep.
Sai meglio di me che il fatto che sia o no inclusa dipende dal fatto
che grep e' gia' esaurito quando il processo viene eseguito. Se
conosci le regexp sai _benissimo_ che le parentesi non hanno alcun
effetto. Se proprio vuoi rimuovere grep dalla lista dei processi
ritornati devi farlo di forza usando grep ... | grep -v grep
Davide
-- 
I mean, we all self-LART to varying degrees on occasion.  What sets us
apart from the lusers is that we can pull ourselves out of the nosedive.
-- Mike Sphar on alt.sysadmin.recovery

 la _tua_ richiesta di grep.
Scusate, ma credo che il motivo sia che il processo di grep e'
grep [i]netd
e quindi grep, che cerca la stringa "inetd" (dato che le parentesi sono
come acqua fresca, usate alla Adamo) non "vede se stesso".
O sbaglio?
Joe
-- 
Full sources for linux currently runs to about 200kB compressed - full
sources to a somewhat complete developement system is at least 10MB
compressed  					-- Linus torvalds, 1992
***  To mail me dump windows

 O sbaglio?
Non sbagli. Per quanto, l'affermazione di Davide sulle regex e`
corretta.
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
It must be in the basement; I'll go upstairs and get it. M.C.Escher

 appena il processo termina non si vede più.
Si, ma "grep inetd" trova "inetd" in "grep inetd", mentre "grep [i]netd" non
trova "[i]netd", perche'certa "inetd".
Ciaotutti,
*
--
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?

 appena il processo termina non si vede piů.
Non hai capito il mio post. Secondo me se metti le parentesi non
vedi il processo grep perche' nell'output di ps ci sono le quadre,
mentre grep non le cerca. 
Fermo restando quindi quello che dice Davide delle regexp,
che dimostra per l'ennesiam volta peraltro che Max Adamo e' un caprone 


 esattamente identici.
Non sono identici.
E' questo il punto.
prova.
--
Massimiliano

 come acqua fresca, usate alla Adamo) non "vede se stesso".
Non e' alla Adamo.
E' qualcosa che ho visto in un manuale sui pattern, quello che mi manca 
e' la logica di funzionamento. Per questo sto chiedendo.
--
Massimiliano.

 ritornati devi farlo di forza usando grep ... | grep -v grep
perfetto ma ... c'e' una cosa da dire:
ps -ef | grep [i]netd
funziona sempre e non ha caso.
Puoi ripeterlo mille volte e mille volte ti
Voglio dire:
Se proprio vuoi rimuovere grep dalla lista dei processi ritornati puoi 
anche usare _tranquillamete_: ps -ef | grep [i]netd
p.s.: so bene a cosa servono le parentesi quadre. Non sono qui per questo.
p.s.: l'ho trovato come esempio in una pagina sui pattern di grep, non 
me lo sono inventato io.
--
Massimiliano.



Se tu invece di offenderti leggessi quello che hai quotato, capiresti
perche' ti da' risultati diversi: perche' grep interpreta [ come
caratteree speciale, mentre ps no!


 caratteree speciale, mentre ps no!
Non mi offendo. Anche se bisogna dire che se io scrivessi "alla 
oblivian" tu potresti probabilmente offenderti.
Sei tu comunque che adesso dici questo, come spiegazione/soluzione: 
Davide Bianchi dice che si deve usare per forza "grep -v grep". Thorin 
si chiedeva anche lui perche' e altri anche.
Non sono solo io il cretino pare. Siamo un po' di cretini che ci 
chiediamo insieme il perche'. E ti ripeto, non e' un comando che ho 
buttato a caso per provare e qualcosa che ho trovato su manuale dei pattern
[semi OT]
Cmq, qui il problema non e' la logica dei patter, o la logica del thread 
in se stesso, ma lo logica del "partito preso" di questo newsgroup, che 
e' partita dal thread nel quale ho parlato male di EXT3 e mi sono 
permesso di mettere in discussione 'sto cazzo di moloch, che per tutti 
voi/noi sta diventando un intoccabbile mostro sacro.
Ma vaffanculo (non a te chiaramente, ma a questa illogica).
--
Massimiliano.

 prova.
Proviamo:
$ echo netd >adamorotfl
$ echo inetd >>adamorotfl
$ echo anetd >>adamorotfl
$ grep [i]netd adamorotfl
inetd
$ grep [ai]netd adamorotfl
inetd
anetd
Unsubscribe, ora, subito, senza se e senza ma.
-- 
Per non dimenticare:
http://snipurl.com/SdC_ed_il_vino
Le sigarette a volte danno buoni consigli:
http://snipurl.com/sigarette

 funziona sempre e non ha caso.
Infatti: è ben noto che inetd è indeclinabile. <beg>


 anche usare _tranquillamete_: ps -ef | grep [i]netd
$ ps -ef | grep [i]netd
root      3248 27226  0 11:17 pts/4    00:00:00 grep inetd


 Infatti: è ben noto che inetd è indeclinabile. <beg>
ROTFL
-- 
cat: .signature: No such file or directory

 
vedi qual'e' il discorso .... sei tu comunque che adesso dici questo, 
come spiegazione/soluzione: Davide Bianchi dice che si deve usare per 
forza "grep -v grep". Thorin si chiedeva anche lui perche' e altri 
anche. L'uso delle [] mi e' chiaro.
Pare che non sono solo io il cretino. Siamo un po' di cretini che ci 
chiediamo insieme il perche'. E ti ripeto, non e' un comando che ho 
buttato a caso per provare e qualcosa che ho trovato su manuale dei pattern
[semi OT]
Cmq, qui il problema non e' la logica dei pattern, o la logica del 
thread in se stesso, ma lo logica del "partito preso" di questo 
newsgroup, che e' partita dal thread nel quale ho parlato male di EXT3 e 
mi sono permesso di mettere in discussione 'sto cazzo di moloch, che per 
tutti voi/noi sta diventando un intoccabbile mostro sacro.
Ma vaffanculo senza se e senza ma (non a te, ma a questa illogica).
-- 
Massimiliano.

prova.
La regexp e' identica. Il risultato e' diverso perche e' diverso l'input,
perche' cambia la riga di comando visualizzata da ps. Prova con
ps axew|tee out1.txt|grep inetd
ps axew|tee out2.txt|grep [i]netd
grep grep out1.txt
grep grep out2.txt
Alessandro.

 anetd
Non hai capito niente?
Quello che scrivi e' ovvio, lo so, lo sapevo gia' e ripeto, non sono qui 
per questo. Il fatto e' che il comando che ho dato io non fa il match 2 
volte della stessa ricorrenza, e la mang page o documentazione che citi 
tu, non dice che se metti le quadre il match occorrera' una sola volta.
--
Massimiliano

 Ma vaffanculo (non a te chiaramente, ma a questa illogica).
Tutta tua ;-P


 root      3248 27226  0 11:17 pts/4    00:00:00 grep inetd
ps -ef|grep '[i]netd'
Dimmi se ti va meglio :P


 mettere una sola lettera tra quadre e' come non fare nulla?
eppure con quelle parentesi quadre sortisce un risultato _sempre_, ed e' 
per questo che sono qui a chiedere la spiegazione e a perdere tempo con 
un cretino come te?
--
Massimiliano.


Mettendo le quadre attorno a un solo carattere stai scrivendo una regular
expression che non matcha se stessa. Questo caso e' normalmente irrilevante
ma puo' tornarti comodo quando stai greppando l'output di un ps.
Credo sia il modo piu' semplice di scrivere una simile espressione...


 Dimmi se ti va meglio :P
ps -ef | grep '[i]netd'
root      1877 27226  0 11:51 pts/4    00:00:00 grep inetd



Ho un sospetto...
Rana?-D
Alessandro.

 Dimmi se ti va meglio :P
(ho barato, ma non dirlo ad Adamo <g>)


 Non hai capito niente?
Io ho capito benissimo, ahite.
Ora te lo svelo l'arcano, visto che sei de coccio.
L'output di ps -ef conterrà la stringa "[i]netd", la quale non matcha
la regexp [i]netd.
Se vuoi matchare la riga di output di ps che contiene "[i]netd", devi
usare grep '\[i\]netd'
Se vuoi fare le capriole e matchare tutto, grep '\[i\]\|[i]netd', ad
esempio.
ps -ef | grep '\[i\]\|[i]netd'
root      1277 27226  0 11:57 pts/4    00:00:00 grep [i]netd
root     29282 17921  0 11:59 pts/5    00:00:00 grep inetd
root     30974 13602  0 11:59 pts/2    00:00:00 grep \[i\]\|[i]netd
(e ti ho anche svelato come ti ho fatto fesso prima...hint: pts)
Vado avanti?
HTH. <g>


 Rana?-D
(no: sono uno sporco e sadico baro. <g>)
In realtà, se guardi l'ultimo post di risposta al pluricertificato, in
altri due pseudoterminali avevo precedentemente lanciato
$  grep [i]netd
e
$ grep inetd
Il grep su ps matchava in realtà il secondo dei comandi e non il primo
né il grep messo in pipe, ovviamente.
Così, tanto per mandarlo in confusione ulteriore. <g>


 Vado avanti?
si si vai avanti tu che mi viene da ridere.
--
Massimiliano.

 la regexp [i]netd.
pattern e regexp non sono la stessa cosa. Quella non e' una regexp.
come ho scritto nel subject e' un pattern
E' un po' come digest e encryption. Si assomigliano ma non sono proprio 
la stessa cosa.
Per usare le regexp usi grep --regexp o grep -e
ciao.
Massimiliano.

 pattern e regexp non sono la stessa cosa.
Sì, ho usato , impropriamente, regexp invece di pattern.
La sostanza non cambia.


 Non sono io ad essere di coccio.
Certo, certo. <g>


 la regexp [i]netd.
la matcha la matcha. Matcha l'output di ps.
Quello che no matcha e' l'output di grep, ovvero l'output di se stessa.
ancora un altro post e raggiungi il livello di Thorin.
--
Massimiliano.

 ancora un altro post e raggiungi il livello di Thorin.
Rotfl, pluricertificato.


 Sei un po' confuso.
Sei un po' imbecille.
Leggi la risposta di Alessandro.
E' l'unica ad avere un senso.
--
Massimiliano.

 Esempio pratico: ps -ef | grep [i]netd
secondo me pochi o nessuno hanno capito la logica.
C'e' gente come wilplash che brancola completamente nel buio, altri che 
si pongono la stessa domanda.
Mi pare che la risposta di Alessandro sia la piu' sensata: in pratica e' 
una eccezzione irrilevante, per cui grep non matcha se stesso e che 
torna utile in congiunzione con ps. punto. basta.
Esempio di quello che dico:
se io redirigo l'output di ps in un file e eseguo la stessa operazione 
dal file, allora quella opzione non ha piu' lo stesso effetto nonostante 
gli output siano uguali, sia quello preso dal file, sia quello dello 
standard output di ps.
--
Massimiliano.

 E' l'unica ad avere un senso.
E' la stessa che ti stan dando (cercando di dare) Oblivian e whip da due
giorni...


 standard output di ps.
Smettila di dire cazzate.
La spiegazione t'è stata data in molteplici forme: se continui a non
capire, proverò con un ultimo disperato tentativo:
$echo "[i]netd" | grep [i]netd
$echo "inetd" | grep [i]netd
inetd
Lo capisci, così, che la *stringa* [i]netd non verrà mai matchata
dal *pattern* [i]netd?


 Lo capisci?
Domanda retorica, spero...


 inetd
???????
--
Massimiliano.

 
no. Ti sbagli.
nel suo messaggio dice e' una "normale eccezione".
--
Massimiliano.

 Domanda retorica, spero...
Ti sbagli.
Prima elementare.
Compito in classe:
ps -ef |grep [i]netd > miofile
cat miofile |grep [i]netd
come vedi l'opzione non funziona piu' nonostante l'output sia uguale.
--
Massimiliano.

 Quando do ps io non cerco di "matchare" [i]netd ma inetd.
E' singolare: ti stai rispondendo da solo e non te rendi conto.
Inzio a pansare che neanche la maieutica possa granchè a fronte
di deprivazioni sinaptiche così marcate.


 
ps -ef |grep [i]netd > miofile
cat miofile |grep [i]netd
punto.basta.
--
Massimiliano.


scusa ho sbagliato:
ps -ef |grep inetd > miofile


 no. Ti sbagli.
Sarà:
<quote whip>
L'output di ps -ef conterrà la stringa "[i]netd", la quale non matcha
la regexp [i]netd.
Se vuoi matchare la riga di output di ps che contiene "[i]netd", devi
usare grep '\[i\]netd'
</quote whip>
<quote joe>
grep [i]netd
e quindi grep, che cerca la stringa "inetd" (dato che le parentesi sono
come acqua fresca, usate alla Adamo) non "vede se stesso".
</quote joe>
... a me paiono chiarissime entrambe.



questa ti sembra pure chiara:
ps -ef | grep inetd > miofile
cat miofile | grep [i]netd
perche' qui non funziona piu' l'assioma del cavolo di wilpl?
--
Massimiliano.

 cat miofile |grep [i]netd
errata corrige:
ps -ef | grep inetd > miofile
cat miofile |grep [i]netd
--
Massimiliano.

 come vedi l'opzione non funziona piu' nonostante l'output sia uguale.
dici?
senza quadre:
sh-2.05b$ ps -ef |grep inetd > gigi
sh-2.05b$ cat gigi
root       429     1  0 Nov04 ?        00:00:00 /usr/sbin/inetd
sh-2.05b$ cat gigi | grep [i]netd
root       429     1  0 Nov04 ?        00:00:00 /usr/sbin/inetd
con le quadre:
sh-2.05b$ ps -ef |grep [i]netd > gigi
sh-2.05b$ cat gigi
root       429     1  0 Nov04 ?        00:00:00 /usr/sbin/inetd
sh-2.05b$ cat gigi | grep [i]netd
root       429     1  0 Nov04 ?        00:00:00 /usr/sbin/inetd
viviamo su sistemi operativi diversi?


 perche' qui non funziona piu' l'assioma del cavolo di wilpl?
perche' ps vede il processo "grep inetd" e non il processo "grep [i]netd"
e quindi quando fai il grep [i]netd su miofile trovi due corrispondenze
alla stringa che cerchi: inetd e grep inetd. Svegliaaa!
Joe
-- 
Full sources for linux currently runs to about 200kB compressed - full
sources to a somewhat complete developement system is at least 10MB
compressed  					-- Linus torvalds, 1992
***  To mail me dump windows

 root       429     1  0 Nov04 ?        00:00:00 /usr/sbin/inetd
non ti ha greppato il ps ... a volte puo' succedere.
riprova.
--
Massimiliano.

 riprova.
Speravo che almeno 'sta benedetta storia del "ti greppo il ps/non ti
greppo il ps" ti fosse ormai chiara...
Prendo atto che ti do troppo per scontato...


 Svegliaaa!
Bah. Io rinuncio...


 Bah. Io rinuncio...
Io _pure_. 
joe



grep --version, please?
Con la "grep (grep GNU) 2.5.1" non ho il tuo risultato ma quello del poster
iniziale.
Ciao,
Giuseppe
-- 
"Guarda, una scimmia a tre teste!"