[Risolto] Bash script

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
pablonero
Prode Principiante
Messaggi: 5
Iscrizione: lunedì 2 maggio 2016, 9:24

[Risolto] Bash script

Messaggio 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..
Ultima modifica di pablonero il venerdì 6 maggio 2016, 10:35, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: bAsh script

Messaggio 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
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
pablonero
Prode Principiante
Messaggi: 5
Iscrizione: lunedì 2 maggio 2016, 9:24

Re: bAsh script

Messaggio da pablonero »

si puo' usare un comando alternativo ad ex perche' mi da comando non trovato....
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Bash script

Messaggio 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.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
pablonero
Prode Principiante
Messaggi: 5
Iscrizione: lunedì 2 maggio 2016, 9:24

Re: Bash script

Messaggio 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..
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Bash script

Messaggio 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
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
pablonero
Prode Principiante
Messaggi: 5
Iscrizione: lunedì 2 maggio 2016, 9:24

Re: Bash script

Messaggio 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....
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Bash script

Messaggio 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
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
pablonero
Prode Principiante
Messaggi: 5
Iscrizione: lunedì 2 maggio 2016, 9:24

Re: Bash script

Messaggio 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..
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 12 ospiti