Pagina 1 di 1
[Risolto] Bash script
Inviato: lunedì 2 maggio 2016, 15:35
da pablonero
Scusate se posto una richiesta stupida ma per me sarebbe importante venirne a capo.
Con un bash script volevo ottenere: cercare una parola in file testo e sostituire frase nella riga immediatamente precedente a quella dove ho trovato la parola..
Ho scritto questo ma non funziona
codice:
#!/bin/sh
if grep -qs 'povero' cat /storia/prova.txt
then
echo 'povero' trovato'
sed -in '/povero/;h s/prova ancora/non provare piu'/g' /storia/prova.txt;
else
echo 'povero non trovato';
fi
Vi ringrazio anticipatemente..
Re: bAsh script
Inviato: lunedì 2 maggio 2016, 17:23
da Zoff
Puoi usare ex:
Codice: Seleziona tutto
ex -s +'/TESTO DA TROVARE/-1 s/TESTO DA SOSTITUIRE/TESTO DI SOSTITUZIONE/g | x' filename.txt
Re: bAsh script
Inviato: lunedì 2 maggio 2016, 20:55
da pablonero
si puo' usare un comando alternativo ad ex perche' mi da comando non trovato....
Re: Bash script
Inviato: mercoledì 4 maggio 2016, 12:24
da crap0101
installalo, magari ti torna utile, oppure usa ed che dovrebbe esserci già
occhio che sovrascrive il file, sostituisci
\nw con
\n,p per vedere solo che fa.
Re: Bash script
Inviato: mercoledì 4 maggio 2016, 14:16
da pablonero
Non mi mandate a quel paese mi ero dimenticato di dire che lo script bash deve essere eseguito in un decoder enigma2..
Re: Bash script
Inviato: mercoledì 4 maggio 2016, 17:10
da crap0101
pablonero ha scritto:
Non mi mandate a quel paese mi ero dimenticato di dire che lo script bash deve essere eseguito in un decoder enigma2..
non c'è neanche ed? :-(
visto che usavi sed - che non poteva funzionare per vari motivi - prova questo (esempio):
Codice: Seleziona tutto
crap0101@orange:/tmp/foo$ cat testo
adffwe
edfefew
povero
fedfwef
rgfrwefef
e
crap0101@orange:/tmp/foo$ sed -n '1{x;d};${x;p};/povero/{x;s/f/X/g;p;x;h};/povero/!{x;p;x;h}' testo
adffwe
edXeXew
povero
fedfwef
rgfrwefef
e
Re: Bash script
Inviato: venerdì 6 maggio 2016, 0:22
da pablonero
Vi ringrazio per le risposte. Purtroppo non sono riuscito ad applicare i consigli di crap0101.
Ricapitolando usando sed avendo poche comandi a disposizione (enigma2)
testo da trovare =testo
riga precendente dove ho trovato testo da trovare sostituisco testo1 con testo2 (tutto sempre riferito a file esempio.txt)
non ho capito come verrebbe l'espressione....
Re: Bash script
Inviato: venerdì 6 maggio 2016, 0:28
da crap0101
"povero" è il "povero" del tuo esempio, mentre i "prova ancora" e "non provare piu'" sono rispettivamente la "f" e la "X" della parte in grassetto
crap0101@orange:/tmp/foo$ sed -n '1{x;d};${x;p};/povero/{x;s/f/X/g;p;x;h};/povero/!{x;p;x;h}' testo
mentre "testo" è il file in input
Re: Bash script
Inviato: venerdì 6 maggio 2016, 10:19
da pablonero
Grande crap0101, funziona; ho dovuto solo aggiungere "i" altrimenti non scrive.
quindi risolto con
cat testo
sed -ni '1{x;d};${x;p};/povero/{x;s/f/X/g;p;x;h};/povero/!{x;p;x;h}' testo
Grazie ancora..