[Risolto] Comando per aggiungere testo da terminale
[Risolto] Comando per aggiungere testo da terminale
Ovvero, facendo un esempio, ... io vorrei solo aggiungere PAOLO@paolo.it , e aggiungendo solo questa email, vorrei creare un comando che da terminale mi scrive automaticamente questa frase su di un file .txt, va a capo e salva il file, ovviamente cambiando mail, cambia solo il soggetto ma il resto delle frasi rimangono uguali :
la casa e' di PAOLO@paolo.it
il proprietario della casa e' PAOLO@paolo.it
il giardino appartiene a @paolo.it e pure il cane e' di @paolo.it
Da notare che nel 1° e 2° inserimento viene aggiunto tutto la frase PAOLO@paolo.it mentre nel 3° e 4° solo @paolo.it
Si puo' fare ???? Che figata se fosse possibile !!!
- thece
- Tenace Tecnocrate
- Messaggi: 12946
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: Comando per aggiungere testo da terminale
diciamo che in modo molto semplice puoi avvicinarti al tuo desiderata in questo modo: supponiamo che tu abbia un file di testo (template.txt) fatto così
Codice: Seleziona tutto
la casa e' di <EMAIL>
il proprietario della casa e' <EMAIL>
il giardino appartiene a <EMAIL> e pure il cane e' di <EMAIL>
Codice: Seleziona tutto
sed -e 's/<EMAIL>/PAOLO@paolo.it/g' template.txt > paolo.txt
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4444
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: Comando per aggiungere testo da terminale
per la terza si dovrebbe conoscerne il contenuto a priori o (come dice teche) avere un segnaposto da sostituire (due o più spazi oppure due punti oppure uno o più caratteri inconsueti, per esempio:
file originale 'file_origine.txt' con segnaposto ':':
Codice: Seleziona tutto
8-) cat file_origine.txt
la casa e' di
il proprietario della casa e'
il giardino appartiene a: e pure il cane e' di:
Codice: Seleziona tutto
email=PAOLO@paolo.it
file_orig=file_origine.txt
part_email=$(grep -o '@.*' <<< "$email")
sed -e "1,2s/$/$email/" -e "3s/:/ $part_email/g" "$file_orig" > risultato.txt
Codice: Seleziona tutto
8-) cat risultato.txt
la casa e' di PAOLO@paolo.it
il proprietario della casa e' PAOLO@paolo.it
il giardino appartiene a @paolo.it e pure il cane e' di @paolo.it
8-)
Re: Comando per aggiungere testo da terminale
Solo un ultima cosa, lo script e' perfetto, funziona !! ...
MA HO BISOGNO che ogni volta che eseguo il comando dello script , sul file risultato.txt , venga aggiunto, per ogni esecuzione, le solite 3 righe contenute sul file_origine.txt, e vengano aggiunte a capo-riga sul file risultato.txt , faccio un esempio ...
eseguo per 3 volte lo script, questo e' il risultato che voglio ottenere sullo stesso file risultato.txt che deve ogni volta aggiornarsi ...
Codice: Seleziona tutto
la casa e' di PAOLO@paolo.it
il proprietario della casa e' PAOLO@paolo.it
il giardino appartiene a @paolo.it e pure il cane e' di @paolo.it
la casa e' di PAOLO@paolo.it
il proprietario della casa e' PAOLO@paolo.it
il giardino appartiene a @paolo.it e pure il cane e' di @paolo.it
la casa e' di PAOLO@paolo.it
il proprietario della casa e' PAOLO@paolo.it
il giardino appartiene a @paolo.it e pure il cane e' di @paolo.it
ED ULTIMA cosa (ultima), esiste un comando da terminale che riesce a modificare/sostituire soltanto la PRIMA riga contenuta nel file script.sh ovvero la riga che contiene la mail ovvero ..
email=PAOLO@paolo.it
... cambiarla direttamente con un comando da terminale senza dover aprire il file script.sh ?????
Risolvendo anche questa ho fatto una cosa mooolto utile .... GRAZIEEE
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4444
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: Comando per aggiungere testo da terminale
Codice: Seleziona tutto
sed -e "1,2s/$/$email/" -e "3s/:/ $part_email/g" "$file_orig" >> risultato.txt
Re: Comando per aggiungere testo da terminale
Il resto me la vedo io da solo, mi avete gia' concesso troppo tempo, e ve ne sono grato.
Grazie !!!!!!!
Re: Comando per aggiungere testo da terminale
File di origine ..
Codice: Seleziona tutto
name="*"
enabled="yes"
type="17"
action="Delete"
condition="OR (from,is,*) OR (all addresses,is,&) OR (from,contains,:) OR (all addresses,contains,:)"
Codice: Seleziona tutto
#!/bin/bash
email=PAOLO@paolo.it
file_orig=filtri_origine.txt
part_email=$(grep -o '@.*' <<< "$email")
sed -e "1,5s/*/$email/" -e "5s/&/$email/" -e "5s/:/$part_email/g" "$file_orig" >> msgFilterRules.dat
Il passo che non riesco a fare ora e' sostituire, tramite comando su terminale, la mail PAOLO@paolo.it dello script, ho provato con ...
Codice: Seleziona tutto
sed -i "3s/$email/MARCO@marco.it/" > script.sh
Quello che cerco di fare e' creare un inserimento di mail spam direttamente aggiungendo mail al file.dat di thunderbird usando script, diciamo il mio primo pseudo programma.
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4444
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: Comando per aggiungere testo da terminale
Ho dato un'occhiata veloce. Usare l'asterisco come segnaposto non è una buona idea, visto che nelle regex ha un significato speciale.
Per assegnare un valore ad una variabile di uno script conviene passarlo come parametro, per esempio:
nello script metti:
Codice: Seleziona tutto
email=$1
Codice: Seleziona tutto
/.script.sh MARCO@marco.it
Re: Comando per aggiungere testo da terminale
Re: Comando per aggiungere testo da terminale
Necessito soltanto del comando sed ed in particolar modo grep per poter selezionare la prima, la seconda e la terza parola di una frase della stessa linea .. per poi scrivere in altro file ma a me e' soltanto necessario conoscere questa modalita' di script ...
SIG MARIO ROSSI , a cui in successione assegno le stringhe ? £ ! nel comando sed sotto descritto ... che combinazione di caratteri hanno sotto grep ????
Codice: Seleziona tutto
#!/bin/bash
text=$1
part_text1=$(grep -o ' .*' <<< "$text")
part_text2=$(grep -o ' .*' <<< "$text")
file_orig=file_origine.txt
sed -e "3,4s/?/$text/" -e "3,4s/$part_text1/g" -e "5s/!/$part_text2/g" "$file_orig" >> risultato.txt
- giulux
- Amministratore
- Messaggi: 25426
- Iscrizione: domenica 10 gennaio 2010, 12:17
- Desktop: ubuntu 18.04
- Distribuzione: Ubuntu 18.04.3 LTS x86_64
- Sesso: Maschile
- Località: Roma
Re: Comando per aggiungere testo da terminale
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4444
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: Comando per aggiungere testo da terminale
Queste righe:
Codice: Seleziona tutto
part_text1=$(grep -o ' .*' <<< "$text")
part_text2=$(grep -o ' .*' <<< "$text")
se devi "smontare" una frase parola per parola (separate da uno spazio) basta assegnare i valori direttamente con read (visto che il separatore predefinito in bash è lo spazio (uno o più spazi, tab e fine-linea )
Codice: Seleziona tutto
8-) testo='aaa bbb ccc'
8-) read parola1 parola2 parola3 <<< "$testo"
8-) echo $parola1
aaa
8-) echo $parola2
bbb
8-) echo $parola3
ccc
8-)
Codice: Seleziona tutto
testo='aaa bbb ccc'
parola1=$(grep -Po '^.*?(?=\s)' <<< "$testo")
parola2=$(grep -Po '.*?\s\K.*(?=\s)' <<< "$testo")
parola3=$(grep -Po '.*\s\K.*?$' <<< "$testo")
echo "$parola1 $parola2 $parola3"
aaa bbb ccc
Ti dico solo che '\s' intercetta spazi e tab; al suo posto puoi mettere il carattere separatore in uso, facendone l'escape '\' in caso abbia un significato speciale per le regex.
un modo più sintetico potrebbe essere:
Codice: Seleziona tutto
testo='aaa bbb ccc'
parola1=$(grep -Po '^\w+' <<< "$testo")
parola2=$(grep -Po '\s\K\w+(?=\s.+)' <<< "$testo") # oppure parola2=$(grep -Po '\s\K\w+(?=\s\w+)' <<< "$testo")
parola3=$(grep -Po '\w+$' <<< "$testo")
echo "$parola1 $parola2 $parola3"
aaa bbb ccc
con AWK è più semplice (consiglio di dargli una studiata
Codice: Seleziona tutto
testo='aaa bbb ccc'
read parola1 parola2 parola3 < <(awk '{print $1,$2,$3}' <<< "$testo")
echo "$parola1 $parola2 $parola3"
No! bash (e di conseguenza read) usa come separatore: uno o più spazi, tab, e fine linea (a meno che non si imposti diversamente IFS).
con awk si possono impostare più separatori, fare calcoli, sostituzioni e impostare l'output come si vuole.
Per esempio, se la frase avesse più separatori tra parole (es.: nome@dominio2.dominio1) potresti scrivere:
Codice: Seleziona tutto
testo='nome@dominio2.dominio1'
awk -F"[.@]" '{print $1,$2,$3}' <<< "$testo"
Codice: Seleziona tutto
awk 'BEGIN{FS="[.@]"} {print $1,$2,$3}' <<< "$testo"
Codice: Seleziona tutto
8-) testo='nome@dominio2.dominio1'
8-) awk -F"[.@]" '{print $1,$2,$3}' <<< "$testo"
nome dominio2 dominio1
8-)
Codice: Seleziona tutto
8-) read parola1 parola2 parola3 < <(awk -F"[.@]" '{print $1,$2,$3}' <<< "$testo")
8-) echo "$parola1 $parola2 $parola3"
nome dominio2 dominio1
8-)
Scusami ma non posso seguire costantemente il forum.
Re: Comando per aggiungere testo da terminale
MARIO ROSSI 3315555222
Volevo creare con i comandi che mi avevi insegnato tu settimane passate, selezionando la riga e dando un comando tramite scorciatoia (che so' realizzare da solo) ed scomporre la riga in tre parole e collocarle in 3 posizioni nel file_origine, in pratica ... il file_origine con assegnate 3 stringhe ? (come prima parola) £ (come seconda) ! (terza)
Codice: Seleziona tutto
BEGIN:VCARD
VERSION:2.1
N:?;£;;;
FN:£ ?
TEL;VOICE;PREF:+39!
END:VCARD
Codice: Seleziona tutto
BEGIN:VCARD
VERSION:2.1
N:ROSSI;MARIO;;;
FN:MARIO ROSSI
TEL;VOICE;PREF:+393315555222
END:VCARD
Re: Comando per aggiungere testo da terminale
Questo lo Script ....
Codice: Seleziona tutto
#!/bin/bash
text1=$1
text2=$2
text3=$3
file_orig=file_origine.txt
sed -e "3,4s/£/$text1/" -e "3,4s/?/$text2/" -e "5s/!/$text3/" "$file_orig" >> contatti.vcf
- giulux
- Amministratore
- Messaggi: 25426
- Iscrizione: domenica 10 gennaio 2010, 12:17
- Desktop: ubuntu 18.04
- Distribuzione: Ubuntu 18.04.3 LTS x86_64
- Sesso: Maschile
- Località: Roma
Re: Comando per aggiungere testo da terminale
Se vuoi puoi installare questo script che aggiunge un pulsante per mettere [Risolto] con un solo click.
Ciao.
Chi c’è in linea
Visualizzano questa sezione: DoctorStrange e 7 ospiti