PDA

Visualizza la versione completa : grep per mostrare solo il pattern trovato


Gianni_T
17-07-2005, 18:35
Salve a tutti,
vorrei sapere come si usa il comando grep per ottenere, dato un pattern, solo i caratteri della riga individuata che rispettano il pattern, senza che mi vengano mostrati i restanti caratteri della riga.

In particolare ho un file composto da righe di questo tipo

5412534 (un nome) altre informazioni che non mi interessano

io vorrei recuperare colo il numero ed il nome tra parentesi

:ciauz:

cacao74
17-07-2005, 19:45
Ti faccio un esempio pratico di un filtro di testo che diventa sempre più selettivo. Ti basterà fare qualcosa di simile all'ultimo esempio, definendo correttamente l'espressione regolare da ricercare, per ottenere i risultati desiderati.


[cacao74@server cacao74]$ grep 80 /etc/services
http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperText Transfer Protocol
socks 1080/tcp # socks proxy server
socks 1080/udp # socks proxy server
corbaloc 2809/tcp # CORBA naming service locator
amanda 10080/tcp # amanda backup services
amanda 10080/udp # amanda backup services
omirr 808/tcp omirrd # online mirror
omirr 808/udp omirrd # online mirror
canna 5680/tcp
http-alt 8008/tcp
http-alt 8008/udp
webcache 8080/tcp # WWW caching service
webcache 8080/udp # WWW caching service
tproxy 8081/tcp # Transparent Proxy
tproxy 8081/udp # Transparent Proxy
[cacao74@server cacao74]$ grep -w 80 /etc/services
http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperText Transfer Protocol
[cacao74@server cacao74]$ pattern="80"; \
grep -w $pattern /etc/services | \
sed -ne "s/^.*\($pattern\).*$/\1/p"
80
80

Oppure, se la struttura è fissa, conviene usare awk:


[cacao74@server cacao74]$ awk ' { print $1 "\t" $2 } ' /etc/services
...
tfido 60177/tcp
tfido 60177/udp
fido 60179/tcp
fido 60179/udp


ciao

Gianni_T
17-07-2005, 19:55
grazie mille!

Loading