Salve,ed eccomi con un nuovo esercizio :) forse in bash? magari dopo cenato cerco come posso fare,ma non ho idea di cosa cercare cioè quale parola dare a zio google. Ho bisogno di cancellare una stringa dentro un file composto da 5 stringhe ma, questa stringa non è sempre uguale. quindi vorrei ottenere una cosa del genere: creare uno script che una volta lanciato controlla tale file e se c'è la stringa la cancella se non c'è non fa nulla ma rimanendo sempre a controllare magari dopo tot secondi/minuti,come detto sopra è vero che la stringa non è sempre uguale però un tot di parole si del tipo http questa non cambia. Grazie Saluti

chiesto 20 Jun '16, 21:22

Davide_74's gravatar image

Davide_74
632658091

Trovato il comando con zio sed per cancellare la stringa con al suo interno 'http' cioè: sed -i '/http/d' file adesso mi manca come fare per controllare tale file con quella stringa ogni tot secondi/minuti

(20 Jun '16, 22:36) Davide_74 Davide_74's gravatar image

per il momento ho risolto in questo modo:

#!/bin/bash
for((i=0; i < 1000; i++)); do
sleep 10s;
sed -i '/http/d' file
done
(21 Jun '16, 14:42) Davide_74 Davide_74's gravatar image

Ciao, per avere un loop infinito, potresti usare il ciclo while, per eliminare la riga contenente la stringa http è corretto l'uso di sed che hai utilizzato tu. Sotto uno script che utilizza while:

luca@linux01:~/Software/Bash/tmp$ cat monitor_and_delete.sh 
#!/bin/bash

# assegno alla variabile NOME_FILE il primo argomento
# passato allo script
NOME_FILE=$1

# assegno alla variabile INTERVALLO il secondo argomento
# passato allo script
INTERVALLO=$2

# se il numero dei parametri passati allo script
# non è 2 esco
if [ "$#" -ne 2 ]; then

echo "dovete specificare il nome del file e il numero di secondi tra un check e l'altro"
exit 1

fi

# verifico se il file esiste
if [ -e "$NOME_FILE" ]; then

# se il file da monitorare esiste
# verifico che il numero di secondi di intervallo
# sia maggiore di 0

if [ $INTERVALLO -gt 0 ]; then

# qui parte un loop infinito eseguito ogni n secondi (quelli specificati
# nel secondo parametro dello script)
# il ciclo è infinito perché la condizione valutata dal while, che in questo caso
# è l'exit status del comando sleep, sarà sempre positiva
# si potrà interrompere il ciclo con un Ctrl+C, o uccidendo il processo

echo "eseguo controllo ogni $INTERVALLO sec."
echo "del file:$NOME_FILE"
echo "per rimozione righe contenenti la stringa:http"
echo "Ctrl+C per terminare"

while sleep $INTERVALLO; do sed -i '/http/d' $NOME_FILE; done

else

# il numero di secondi passato come intervallo non è
# maggiore di zero, esco
echo "il numero di secondi passato come intervallo non è > 0!"
exit 3

fi

else

# se il file da monitorare non esiste
# esco 
echo "il file da monitorare non esiste!"
exit 2

fi

Ciao,

Luca

coll. permanente

ha risposto 01 Jul '16, 08:06

luk71's gravatar image

luk71
902

Grazie @luk71. Adesso non serve più ma nemmeno il mio perchè ho finito di fare un altro lavoretto servendomi del mio :) perchè nessuno "stranamente" rispondeva :( dico strano perchè mi hanno già aiutato su cose forse molto più complicate mha. comunque il tuo esempio può sempre servire per altre occasioni Grazie ancora Saluti

(01 Jul '16, 19:53) Davide_74 Davide_74's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×105

domanda posta: 20 Jun '16, 21:22

domanda visualizzata: 1,680 volte

ultimo aggiornamento: 01 Jul '16, 19:53

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.