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à

Codice: Seleziona tutto

ed -s FILE <<< $'/RIGA_MATCH/-1s/PATTERN/SOST/g\nw'
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
crap0101 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4878513#p4878513][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:installalo, magari ti torna utile, oppure usa ed che dovrebbe esserci già

Codice: Seleziona tutto

ed -s FILE <<< $'/RIGA_MATCH/-1s/PATTERN/SOST/g\nw'
occhio che sovrascrive il file, sostituisci \nw con \n,p per vedere solo che fa.
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..