[Risolto] Comando per aggiungere testo da terminale

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
mamaori
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 327
Iscrizione: venerdì 11 dicembre 2009, 16:31

[Risolto] Comando per aggiungere testo da terminale

Messaggio da mamaori »

Ciao, esiste per caso un comando da terminale che riesce ad aggiungere automaticamente la parola in piu' campi ???
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 !!!
Ultima modifica di mamaori il venerdì 3 agosto 2018, 11:40, modificato 1 volta in totale.
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12946
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Comando per aggiungere testo da terminale

Messaggio da thece »

:ciao:

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>
per creare un nuovo file nel quale vai a sostituire il testo (segnaposto) <EMAIL> con il testo PAOLO@paolo.it puoi usare il seguente comando

Codice: Seleziona tutto

sed -e 's/<EMAIL>/PAOLO@paolo.it/g' template.txt > paolo.txt
Linux dispone di un'ampia gamma di strumenti per la manipolazione dei testi, non ti resta che documentarti e sbizzarrirti
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Per le prime due righe non ci sono problemi, basta accodare l'indirizzo email;
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:
lo script:

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
Una volta eseguito il codice, vado a leggere il file risultante 'risultati.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-)
Salva l'Ucraina! 🇺🇦
mamaori
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 327
Iscrizione: venerdì 11 dicembre 2009, 16:31

Re: Comando per aggiungere testo da terminale

Messaggio da mamaori »

FANTASTICO !!! Grazie ragazzi grazieee !!!
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
Ovviamente, se il giorno dopo eseguo lo script ancora, verranno aggiunte le solite 3 righe contenute sul file_origine.txt alle gia' esistenti sul file risultato.txt AGGIORNANDOSI ...

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
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Per accodare il testo basta usare ">>" al posto di ">":

Codice: Seleziona tutto

sed -e "1,2s/$/$email/" -e "3s/:/ $part_email/g" "$file_orig" >> risultato.txt
La seconda domanda non l'ho capita :)
Salva l'Ucraina! 🇺🇦
mamaori
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 327
Iscrizione: venerdì 11 dicembre 2009, 16:31

Re: Comando per aggiungere testo da terminale

Messaggio da mamaori »

Fantastico !!! va che e' una meraviglia, immagino che per voi queste siano sciocchezze, per me invece e' come vedere la magia ... che figata....
Il resto me la vedo io da solo, mi avete gia' concesso troppo tempo, e ve ne sono grato.

Grazie !!!!!!! :D :D :D
mamaori
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 327
Iscrizione: venerdì 11 dicembre 2009, 16:31

Re: Comando per aggiungere testo da terminale

Messaggio da mamaori »

Io non ci riesco, ho provato ma non va... questo e' cio' che stavo facendo, per le rotture di Cxxx delle mail spam, uso Thunderbird .. quindi

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,:)"
Script ..

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
Come vedi, ho dovuto riportare 2 volte la riga -e "1,5s/*/$email/" -e "5s/&/$email/", e dare alla mail intera 2 stringhe differenti poiche' come risultato mi inseriva la mail intera sulla prima riga ok, sulla quinta riga la prima mail intera ok la metteva, la seconda invece no, poi le due mail mezzane a seguire le metteva ok, cosi ho provato a fare quella variazione con la stringa & ... ee.. vabbe', cmq funziona cosi.

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
Ma non ce' verso ... mi si blocca addirittura il terminale ...
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.
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Devo fare toccata e fuga.
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
e quando vuoi eseguire lo script fai una cosa del genere:

Codice: Seleziona tutto

/.script.sh MARCO@marco.it
(Per documentarti cerca 'bash parametri posizionali')
Salva l'Ucraina! 🇺🇦
mamaori
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 327
Iscrizione: venerdì 11 dicembre 2009, 16:31

Re: Comando per aggiungere testo da terminale

Messaggio da mamaori »

GRAZIE !!! TROPPO GENTILE .... grazie
mamaori
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 327
Iscrizione: venerdì 11 dicembre 2009, 16:31

Re: Comando per aggiungere testo da terminale

Messaggio da mamaori »

come posso formulare il seguente comando ??? non ce l'ho fatta da solo, troppi esempi e poche spiegazioni logiche trovate ...
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
Avatar utente
giulux
Amministratore
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

Messaggio da giulux »

Ho spostato in programmazione, che mi pare più adatto.
"Non è una segno di buona salute l'essere ben adattato ad una società malata". (Jiddu Krishnarmurti)
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Per usare sed e grep dovresti studiarti: bash, le espressioni regolari e sed.
Queste righe:

Codice: Seleziona tutto

part_text1=$(grep -o ' .*' <<< "$text")
part_text2=$(grep -o ' .*' <<< "$text")
com'è logico pensare, essendo uguali, assegnano lo stesso identico valore alle due variabili.
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-) 
ma, nel tuo caso, credo ti sia più utile grep o AWk, in modo da poter specificare più separatori

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
Non posso spiegarti tutto, per comprendere cerca "regex perl"
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
si può scrivere in tanti modi.

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"
Dirai: " allora, tanto vale usare solo read!"
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"
oppure

Codice: Seleziona tutto

awk 'BEGIN{FS="[.@]"} {print $1,$2,$3}' <<< "$testo"
guarda:

Codice: Seleziona tutto

8-) testo='nome@dominio2.dominio1'
8-) awk -F"[.@]" '{print $1,$2,$3}' <<< "$testo"
nome dominio2 dominio1
8-) 
quindi:

Codice: Seleziona tutto

8-) read parola1 parola2 parola3 < <(awk -F"[.@]" '{print $1,$2,$3}' <<< "$testo")
8-) echo "$parola1 $parola2 $parola3"
nome dominio2 dominio1
8-) 
P.S.: quello che vuoi fare (impostare filtri per Thunderbird) non mi pare abbia molto senso, il modo più semplice è usare l'applicazione grafica fornita dal programma. Se lo fai per interesse didattico, allora ha un senso.
Scusami ma non posso seguire costantemente il forum.
Salva l'Ucraina! 🇺🇦
mamaori
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 327
Iscrizione: venerdì 11 dicembre 2009, 16:31

Re: Comando per aggiungere testo da terminale

Messaggio da mamaori »

Credimi credevo fosse davvero piu' semplice, ... l'internzione era ed e' questa ... ammettiamo che nella stessa riga io ho queste 3 parole (che ovviamente cambiano...)
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
ed una volta dato il comando, dovrebbe diventare in questo modo ...

Codice: Seleziona tutto

BEGIN:VCARD
VERSION:2.1
N:ROSSI;MARIO;;;
FN:MARIO ROSSI
TEL;VOICE;PREF:+393315555222
END:VCARD
Grazie !!!! potessi scegliere l'emoji ne metterei una che si prosterna ai tuoi piedi .. grazie davvero !
mamaori
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 327
Iscrizione: venerdì 11 dicembre 2009, 16:31

Re: Comando per aggiungere testo da terminale

Messaggio da mamaori »

HO risolto cosi !!!! GRAZIE !!!!! GRAZIE!!!!!
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
ficooo!!!!!
Avatar utente
giulux
Amministratore
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

Messaggio da giulux »

Se non hai più problemi modifica il titol del primo post mettendoci davanti [Risolto].

Se vuoi puoi installare questo script che aggiunge un pulsante per mettere [Risolto] con un solo click.
Ciao.
"Non è una segno di buona salute l'essere ben adattato ad una società malata". (Jiddu Krishnarmurti)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: DoctorStrange e 7 ospiti