fare modifiche in una stringa prima o dopo un certo carattere

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
eb-ash
Prode Principiante
Messaggi: 153
Iscrizione: lunedì 18 febbraio 2019, 18:02
Sesso: Maschile

fare modifiche in una stringa prima o dopo un certo carattere

Messaggio da eb-ash » sabato 17 ottobre 2020, 14:01

Non riesco a trovare documentazione in rete su Sed per imparare a fare operazioni su una parte di stringa, ad es.

Avrei bisogno di imparare come operare prima o dopo la prima occorrenza di un carattere, ad es. un trattino
Il castello (del conte dracula) - la creatura (di frankestein)
diventa
(del conte dracula) Il castello - la creatura (di frankestein)

Vorrei proprio poter "isolare" la parte prima del trattino dal resto della stringa, oppure scegliere di isolare la parte dopo. Eventualmente poter scegliere come delimitatore al posto del trattino
un parantesi di apertura o di chiusura.

Perchè la parte della stringa prima del trattino può avere solo parole oppure parole con una sola parentesi finale mentre la parte dopo il trattino può avere di tutto...



Per il momento so solo sostituire prima o dopo un trattino con questo comando sed ' s/\<[^-]\{1,\}/&YAHOO!!!/2 ho messo questo comando perchè la cosa più avanzata che conosco! :phew: :phew:
Vorrei imparare da solo ma in rete non trovo un solo manuale su come manipolare le stringhe! Vado avanti solo con domande e risposte di stackoverflow e faccio una fatica mostruosa perchè trovo solo faccende come lavorare tra linee e file ma non nella semplice stringa! :cry:
si è vero uso un mac. Ma detesto i maccisti del web. Se la tirano, non ti aiutano, sono abituati ad avere la pappa fatta e non costruirsi le cose, e sono troppo pochi... quando serve non ci sono mai. Voglio imparare un po' di Bash per fare tante cose utili perchè questo sono qua... senza formazione specifica ma in fondo è unix che permette di fare le cose a pezzetti, no?

Avatar utente
DoctorStrange
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1947
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 18.04 Bionic Beaver
Sesso: Maschile
Località: Roma, Italia

Re: fare modifiche in una stringa prima o dopo un certo carattere

Messaggio da DoctorStrange » sabato 17 ottobre 2020, 14:18

Se hai a disposizione dei dataset identificati da specifici pattern, io userei "AWK" piuttosto che sed. O meglio, con awk discrimini le due (o piu) parti della stringa, e poi applichi sed per fare trasformazioni atomiche sui frammenti estratti.

Puoi usare le opzioni specifiche di awk come FS (Field Separator) ed RS (Record Separator), per identificare i caratteri separatori, ed i caratteri che identificano la fine della stringa.

A quel punto con sed trasformi i vari frammenti come vuoi.

Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4244
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 18.04.4 64bit

Re: fare modifiche in una stringa prima o dopo un certo carattere

Messaggio da vaeVictis » sabato 17 ottobre 2020, 16:14

Codice: Seleziona tutto

vaevictis@vaevictis-N56VV:~$ echo "Il castello (del conte dracula) - la creatura (di frankestein)" | sed 's/\(.*\) \((.*)\) -\(.*\)/\2 \1 -\3/'
(del conte dracula) Il castello - la creatura (di frankestein)
Non è che esista una universale modifica prima e dopo un certo carattere... devi adattare l'espressione regolare al caso specifico.
In questo caso il comando sed è:

Codice: Seleziona tutto

sed 's/\(.*\) \((.*)\) -\(.*\)/\2 \1 -\3/'
Come funzioni è abbastanza semplice da capire. Se non capisci qualcosa fai un fischio.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»

Avatar utente
eb-ash
Prode Principiante
Messaggi: 153
Iscrizione: lunedì 18 febbraio 2019, 18:02
Sesso: Maschile

Re: fare modifiche in una stringa prima o dopo un certo carattere

Messaggio da eb-ash » sabato 17 ottobre 2020, 17:40

Se le parentesi sono quadre come si possono escapare? Col normale \ non funziona
si è vero uso un mac. Ma detesto i maccisti del web. Se la tirano, non ti aiutano, sono abituati ad avere la pappa fatta e non costruirsi le cose, e sono troppo pochi... quando serve non ci sono mai. Voglio imparare un po' di Bash per fare tante cose utili perchè questo sono qua... senza formazione specifica ma in fondo è unix che permette di fare le cose a pezzetti, no?

Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4244
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 18.04.4 64bit

Re: fare modifiche in una stringa prima o dopo un certo carattere

Messaggio da vaeVictis » sabato 17 ottobre 2020, 19:10

eb-ash ha scritto:
sabato 17 ottobre 2020, 17:40
Se le parentesi sono quadre come si possono escapare? Col normale \ non funziona
Funziona funziona

Codice: Seleziona tutto

vaevictis@vaevictis-N56VV:~$ echo "Il castello [del conte dracula] - la creatura (di frankestein)" | sed 's/\(.*\) \(\[.*\]\) -\(.*\)/\2 \1 -\3/'
[del conte dracula] Il castello - la creatura (di frankestein)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»

Avatar utente
eb-ash
Prode Principiante
Messaggi: 153
Iscrizione: lunedì 18 febbraio 2019, 18:02
Sesso: Maschile

Re: fare modifiche in una stringa prima o dopo un certo carattere

Messaggio da eb-ash » sabato 17 ottobre 2020, 23:46

:muro: Funziona. Io mettevo la quadre fuori ...

Grazie!


PS: non riesco a trovare una risorsa in rete in cui si trovino tutte queste cose, se per caso ne conosci una sarebbe molto gradita :chef:
si è vero uso un mac. Ma detesto i maccisti del web. Se la tirano, non ti aiutano, sono abituati ad avere la pappa fatta e non costruirsi le cose, e sono troppo pochi... quando serve non ci sono mai. Voglio imparare un po' di Bash per fare tante cose utili perchè questo sono qua... senza formazione specifica ma in fondo è unix che permette di fare le cose a pezzetti, no?

Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4244
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 18.04.4 64bit

Re: fare modifiche in una stringa prima o dopo un certo carattere

Messaggio da vaeVictis » domenica 18 ottobre 2020, 0:38

eb-ash ha scritto:
sabato 17 ottobre 2020, 23:46
Funziona. Io mettevo la quadre fuori ...
Avevo immaginato.
eb-ash ha scritto:
sabato 17 ottobre 2020, 23:46
Grazie
Di nulla.
eb-ash ha scritto:
sabato 17 ottobre 2020, 23:46
non riesco a trovare una risorsa in rete
Come stai messo con l'Inglese? La documentazione è comunque in questa lingua.
In caso, io inizierei a vedere cosa propone il progetto GNU, quindi da questo Getting Help e dal manuale (che è la voce "online manual" del precedente link, nella versione HTML).
Nel Getting Help, per dire, trovi anche dei giochi scritti in sed.

Questa è in Italiano, anche se spiega poco.

Poi in generale darei un'occhiata (sono serio) alla manpage di BASH e alle operazioni di manipolazione di stringhe in BASH, che a volte ti evitano di utilizzare sed
Ultima modifica di vaeVictis il domenica 18 ottobre 2020, 1:22, modificato 1 volta in totale.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»

Avatar utente
eb-ash
Prode Principiante
Messaggi: 153
Iscrizione: lunedì 18 febbraio 2019, 18:02
Sesso: Maschile

Re: fare modifiche in una stringa prima o dopo un certo carattere

Messaggio da eb-ash » domenica 18 ottobre 2020, 1:15

Alcuni di quei link li conosco... devo dire che sono poco orientati al pratico, sono più sul teorico che serve per chi vuole lavorarci e giustamente deve capire i concetti di fondo ma per chi vuole sfruttarne le possibilità, come una qualsiasi risorsa che il computer mette a disposizione di chiunque per i propri hobbies, la fatica è tanta... con l'inglese me la cavo come con il transilvano, l'italiano è molto gradito...

ti ringrazio ancora Vae, non hai idea di che mi aiuto mi state dando tu e Ubu.
si è vero uso un mac. Ma detesto i maccisti del web. Se la tirano, non ti aiutano, sono abituati ad avere la pappa fatta e non costruirsi le cose, e sono troppo pochi... quando serve non ci sono mai. Voglio imparare un po' di Bash per fare tante cose utili perchè questo sono qua... senza formazione specifica ma in fondo è unix che permette di fare le cose a pezzetti, no?

Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti