|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Oct 2008
Città: Lucca
Messaggi: 15
|
[script] cerca e cancella riga
Ciao,
ho un file HOSTS contenente centinaia di indirizzi web sotto forma numerica [xxx.xxx.xxx.xxx] e con [nomeesempio.com] molti di questi indirizzi sono identici, fatta eccezione per la parte iniziale. es: 1.nomeesempio.com, 2.nomeesempio.com, 3.nomeesempio.com, ecc... vorrei realizzare uno script o comunque sfruttare uno script di qualche programma già esistente (OpenOffice?) per rimuovere tutti i simili e mantenere solo la radice. Dell'indirizzo sopra vorrei solo nomeesempio.com, cancellando le righe superflue, ma non riesco a trovare lo script o la stringa di codice da usare per farlo. Se qualcuno può darmi lumi, grazie Ultima modifica di Daniele Rossi : 06-11-2008 alle 14:40. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Usando la powershell dovrebbe essere abbastanza agevole. Se mi spieghi un pò più nel dettaglio cosa vuoi fare provo a darti una mano.
Immagino che il file hosts contenga anche altre righe che non devi toccare. Penso che la cosa più pratica sia ciclare il file riga per riga tramite il cmd-let get-content e lavorarci così. Ti consiglio intanto di scaricarti la powershell da qui http://www.microsoft.com/windowsserv.../download.mspx scegliendo quella relativa al tuo sistema operativo. Nel caso non lo abbia già scarica pure il framework .NET in quanto è richiesto. Una volta installata la puoi richiamare da esegui digitando powershell. Quando hai concluso l'installazione spiegami nel dettaglio come dev'essere il nuovo file e cerchiamo di risolvere. edit. Giusto per darti un'idea della flessibilità di powershell. Come faresti col classico prompt dei comandi raggiungi la cartella contenente il tuo file hosts e digita questo comando (oppure fai copia incolla gc hosts | ? {$_ -notmatch "nomeesempio.com"} | out-file nuovo.txt questa riga esaminerà il contenuto del tuo file ed estrarrà solo le righe che non contengono la stringa nomeesempio.com. Una volta filtrate reindirizzerà l'output su un nuovo file di testo di nome nuovo.txt che verrà creato all'interno della stessa cartella. Ultima modifica di john_revelator : 06-11-2008 alle 17:12. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Oct 2008
Città: Lucca
Messaggi: 15
|
Fantastico! penso che questo tool sia esattamente quel che fa per me
Ora, venendo al problema, ho scritto: gc hosts | ? {$_ -match "a8.net"} out-file nuovo.txt dove a8.net è uno dei molti siti listati con "doppioni" (es: test.a8.net, 1.a8.net, 2.a8.net, ecc...) adesso stavo cercando di avere un file di testo contenente tutte le voci che includono a8.net, tanto per fare una prova. Il risultato però è un errore che ti riporto: Where-Object : Impossibile trovare un parametro corrispondente al nome 'out-file'. In riga:1 car:13 + gc hosts | ? <<<< {$_ -match "a8.net"} out-file nuovo.txt Il mio scopo finale è quello di conservare solo i siti "radice" (quindi a8.net ma non test.a8.net, 1.a8.net, 2.a8.net, ecc...) così da avere un file HOSTS snello e performante. La lista adesso comprende 616.620 byte, tagliando le righe non "radice" dovrei arrivare intorno ai 100.000 byte circa. EDITO: per ottimizzare: mi occorre un comando che "rimuova" tutte le voci con più di 4 . (punti) sulla stessa riga. Questo perché i siti listati sono del genere: 127.0.0.1 test.nomesito.com e io voglio conservare solo la radice, ovvero: 127.0.0.1 nomesito.com Ultima modifica di Daniele Rossi : 07-11-2008 alle 08:34. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
L'errore che ti viene restituito è dovuto al fatto che prima di out-file ti sei dimenticato di inserire la pipe (|).
Puoi anche limitarti a fare prima gc hosts | ? {$_ -match "a8.net"} così vedi le righe che corrispondono al criterio. Una volta appurato questo puoi reindirizzare l'output su file di testo. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Oct 2008
Città: Lucca
Messaggi: 15
|
Funziona ma è un processo lentissimo, devo selezionare una riga "radice" per volta e poi trascrivere i risultati.
C'è un comando per rimuovere tutte le righe che presentano più "punti", come dicevo sopra? Al momento non mi viene in mente un metodo più efficiente per procedere. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Quote:
Per quanto riguarda la tua domanda ci devo pensare. Adesso sono a lavoro. Stasera con calma vedo se riesco a trovare una soluzione. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Con questo comando ti verranno restituite tutte le righe del file host che contengono al massimo 4 punti
Codice:
gc hosts | where { @([regex]::matches($_,"\.")).length -le 4}
Codice:
gc hosts | where { @([regex]::matches($_,"\.")).length -le 4} | out-file nuovo.txt
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Oct 2008
Città: Lucca
Messaggi: 15
|
john grazie, seriamente
era 1 mese che impazzivo tra siti di script e manuali pdf di openoffice senza cavarne nulla di utile. la dimensione attuale è di 151.654 byte. Un bel risultato direi |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:49.




















