View Full Version : [unxutils] sintassi sed
john_revelator
05-06-2009, 15:14
Salve a tutti. Ho bisogno di modificare via batch delle righe di un file di testo. Ho cercato un pò in rete e a quanto ho capito serve il porting su windows del comando sed di linux.
Ho perciò scaricato da qui
http://sourceforge.net/projects/unxutils
il pacchetto e copiato il file sed.exe nella cartella system32.
Purtroppo l'help del comando non mi è stato di grosso aiuto.
Ciò che vorrei fare è semplicemente, una volta richiamato il comando, potergli dare come parametri il nome del file, la stringa da cercare e quella con cui sostituirla. Spero che qualcuno di voi abbia giù usato questa utility e possa consigliarmi. :)
P.S. Non sapevo se postare qui o in programmazione. Nel caso la sezione sia sbagliata mi scuso fin da ora e chiedo a un moderatore che gentilmente mi sposti.
john_revelator
05-06-2009, 15:40
Cercando un pò ho trovato un prezioso suggerimento su wikipedia
http://en.wikipedia.org/wiki/Sed
che adattata a windows son riuscito a far funzionare così
sed "s/stringa_da_cercare/stinga_da_sostituire/g" file_input.txt > file_output.txt
Ultima domanda: è possibile effettuare sostituzioni multiple in un colpo solo o sono costretto a eseguire prima un comando, poi passare come input della seconda sostituzione l'ouput della prima e così via? Grazie.
john_revelator
05-06-2009, 16:18
Mi rispondo da solo. E' possibile separando le sostituzioni con il punto e virgola
sed "s/cerca1/sostituisci1/g;s/cerca2/sostituisci2/g" input.txt > output.txt
sorry nn ho fatto in tempo ad aiutarti :)
la tua soluzione va bene...
ma secondo me è meglio se usi uno "script" file per le sostituzioni :)
sed -f SCRIPTFILE input > output
e nello SCRIPT FILE ci metti le tue sostituzioni:
s/cerca1/sostituisci1/g
s/cerca2/sostituisci2/g
(credo vada anche nella versione per windows...ma nn sono sicuro...se vuoi prova)
john_revelator
05-06-2009, 20:19
Ciao zuper. Gentilissimo. ;)
Ho provato e funziona perfettamente. In questo modo risulta tutto più pulito. Ho anche provato a fare una sostituzione non case-sensitive e ho visto su google che è sufficiente aggiungere il parametro i.
s/cerca1/sostituisci1/gi
s/cerca2/sostituisci2/gi
Mi rimane ancora una curiosità se puoi aiutarmi. E' possibile effettuare una sostituzione soltanto nel caso in cui una riga del file contenga SOLO il testo specificato come cerca e non anche altro contenuto?
Esempio
pippo
ciao pippo
pippo
Vorrei sostituire pippo con pluto solo nelle righe 1 e 3.
Grazie ancora. :)
dopo controllo
al volo prova
s/^pippo//d
john_revelator
06-06-2009, 00:32
Grazie per la risposta ma non ho capito come va scritta per intero. :fagiano:
Grazie per la risposta ma non ho capito come va scritta per intero. :fagiano:
come prima...credo :) non ho mai provato quel tipo di sostituzione :)
sed "s/^pippo/stringainsostituzione/d" input > output
john_revelator
06-06-2009, 00:45
Grazie. Purtroppo mi restituisce un file vuoto. Ho anche provato con
sed "s/^pippo$/pluto/g" input > output
ma modifica solo l'ultima riga del file.
Grazie. Purtroppo mi restituisce un file vuoto. Ho anche provato con
sed "s/^pippo$/pluto/g" input > output
ma modifica solo l'ultima riga del file.
sorry!
domani ci do un occhio, ritiro su una macchina linux e ti dico...spero ;)
boh io sto provando su una macchina linux e il
sed 's/^pippo$/pluto/g' test
funziona...
john_revelator
06-06-2009, 01:27
Evidentemente questo porting su windows è stato fatto ad cazzum. Mi è stato consigliato di provare gnuwin32. Domani tenterò con quello. Grazie per la disponibilità e buona notte. :)
Evidentemente questo porting su windows è stato fatto ad cazzum. Mi è stato consigliato di provare gnuwin32. Domani tenterò con quello. Grazie per la disponibilità e buona notte. :)
notte :)
se no ti scarichi una fedora vmware e la usi con vmware player :D
vedi?
[root@localhost tmp]# cat test
pippo
ciao pippo
pippo
pippo cane
[root@localhost tmp]# sed 's/^pippo$/pluto/g' test
pluto
ciao pippo
pluto
pippo cane
[root@localhost tmp]#
john_revelator
06-06-2009, 11:45
Ho visto. E' proprio un problema del porting. Ripiegherò su gnuwin32 allora sperando vada meglio. Grazie ancora.
edit.
Confermo che ^pippo$ col sed di gnuwin32 fa esattamente il suo dovere. :)
Confermo che ^pippo$ col sed di gnuwin32 fa esattamente il suo dovere. :)
quasi quasi ci do un occhio è sempre comodo avere tools di linux sotto windows :)
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.