Live Support My forum, my way! Il forum dei newsgroup: Linux » [X-POST] Sostituzione stringa in file
My forum, my way! Il forum dei newsgroup
Fast Uncompromising Discussions.Newsgroup FUDforum will get your users talking.

Loading
Utenti      F.A.Q.    Registrati    Login    Home
Home » Computer » Linux » [X-POST] Sostituzione stringa in file
[X-POST] Sostituzione stringa in file [messaggio #122396] lun, 26 settembre 2011 12:58 Messaggio successivo
Gandalf Corvotempesta  è attualmente disconnesso Gandalf Corvotempesta
Messaggi: 2
Registrato: settembre 2011
Junior Member
Supponiamo di avere un file con dentro un placeholder di questo tipo:

##UTENTE##

Supponiamo anche di avere uno script che elabora dei dati e se li
ritrova in

stringa=$(cat /file)

ho la necessità di mettere ${stringa} al posto del placeholder.

Considerato che ${stringa} conterrà i peggiori caratteri, non
posso usare "normalmente" sed, in quando la regex sicuramente si
spaccherà grazie al contenuto di ${stringa}

Come posso effettuare questa sostituzione visto che ${stringa} sarà
un qualcosa di molto, molto lungo e con varie schifezze al suo interno?


--
Non tocca a noi dominare tutte le maree del mondo,
il nostro compito è di fare il possibile per la
salvezza degli anni nei quali viviamo,
sradicando il male dai campi che conosciamo.
Re: [X-POST] Sostituzione stringa in file [messaggio #122397 è una risposta a message #122396] lun, 26 settembre 2011 13:23 Messaggio precedenteMessaggio successivo
Leonardo Serni  è attualmente disconnesso Leonardo Serni
Messaggi: 3
Registrato: giugno 2011
Junior Member
On Mon, 26 Sep 2011 12:58:12 +0200, Gandalf Corvotempesta
<gandalf.corvotempesta@gmail.com> wrote:

>Come posso effettuare questa sostituzione visto che ${stringa} sarà
>un qualcosa di molto, molto lungo e con varie schifezze al suo interno?

sed -e "s/##UTENTE##/##SEGNAPOSTOPRIMA##\n##SEGNAPOSTODOPO##/g" \
< input \
| sed -e "/##SEGNAPOSTOPRIMA##/r sourcefile" \
| sed -e ':a;N;$!ba;s/\n*##SEGNAPOSTO[A-Z]*##\n*//g' \
> output

**Non** e' il sistema migliore[1], ma volevo farlo con sed :-D

Leonardo

[1] che è Perl. Per es. il terzo sed si mangia un mondo di memoria, non
usare questo script se il file di origine e' molto grosso. Esistono
sistemi di templating migliori.

--
Surstangas via akcipitr', la ceval' fojnumas nur:
Jen vigla damo en brakum', kaj vi pensas pri forkur'?
Do li turnis sin, kaj turnis sin, kaj ekdormis sen singard';
Kaj lin apudis je l' vekigx, soldatoj kaj Barnard'.
Re: Sostituzione stringa in file [messaggio #122448 è una risposta a message #122397] lun, 26 settembre 2011 14:17 Messaggio precedenteMessaggio successivo
Gandalf Corvotempesta  è attualmente disconnesso Gandalf Corvotempesta
Messaggi: 2
Registrato: settembre 2011
Junior Member
On 26 Set, 13:23, Leonardo Serni <ser...@tin.it> wrote:
> sed -e "s/##UTENTE##/##SEGNAPOSTOPRIMA##\n##SEGNAPOSTODOPO##/g" \
>         < input \
>         | sed -e "/##SEGNAPOSTOPRIMA##/r sourcefile"  \
>         | sed -e ':a;N;$!ba;s/\n*##SEGNAPOSTO[A-Z]*##\n*//g' \
>         > output
>
> **Non** e' il sistema migliore[1], ma volevo farlo con sed :-D


oooooohhhhhhhh, stupore immenso, non ci sarei mai arrivato.
Presumo si possa anche rimuovere il primo sed, se nel file di template
mettessi da subito il doppio placeholder (inizio/fine)

Ma possibile che in uno script bash non sia possibile fare il replace
di
una stringa senza usare sed o altri software complicandosi la vita con
escape e cose simili?
Re: [X-POST] Sostituzione stringa in file [messaggio #122793 è una risposta a message #122396] mar, 27 settembre 2011 08:18 Messaggio precedenteMessaggio successivo
whiplash  è attualmente disconnesso whiplash
Messaggi: 8
Registrato: gennaio 2008
Junior Member
Il 26/09/2011 12:58, Gandalf Corvotempesta ha scritto:

> stringa=$(cat /file)

Ora arriva malin e senti...(:
Re: Sostituzione stringa in file [messaggio #124385 è una risposta a message #122448] ven, 30 settembre 2011 23:08 Messaggio precedente
Marco  è attualmente disconnesso Marco
Messaggi: 226
Registrato: giugno 2007
Senior Member
On Mon, 26 Sep 2011 05:17:38 -0700 (PDT), Gandalf Mithrandir
<gandalf.corvotempesta@gmail.com> wrote:

> On 26 Set, 13:23, Leonardo Serni <ser...@tin.it> wrote:
> > sed -e "s/##UTENTE##/##SEGNAPOSTOPRIMA##\n##SEGNAPOSTODOPO##/g" \
> >         < input \
> >         | sed -e "/##SEGNAPOSTOPRIMA##/r sourcefile"  \
> >         | sed -e ':a;N;$!ba;s/\n*##SEGNAPOSTO[A-Z]*##\n*//g' \
> >         > output
> >
> > **Non** e' il sistema migliore[1], ma volevo farlo con sed :-D
>
>
> oooooohhhhhhhh, stupore immenso, non ci sarei mai arrivato.
> Presumo si possa anche rimuovere il primo sed, se nel file di template
> mettessi da subito il doppio placeholder (inizio/fine)
>
> Ma possibile che in uno script bash non sia possibile fare il replace
> di
> una stringa senza usare sed o altri software complicandosi la vita con
> escape e cose simili?

Con awk devi solo fare l'escape dei & (se ne hai, altrimenti niente):

awk -v s="${stringa//&/\\\\&}" '{gsub(/##UTENTE##/, s); print}'

Se lo vuoi fare tutto in bash:

while IFS= read -r line; do
line=${line//##UTENTE##/"$stringa"}
printf '%s\n' "$line"
done < file


Per cose piu' complesse, ci sono n-mila sistemi di templating.

--
Cio' che si vede, e'.
Argomento precedente:Come si installa AVLinux?
Argomento successivo:[FAQ][20111001] Domande frequenti del newsgroup it.comp.os.linux.iniziare
Vai al forum:
  


Ora corrente: mar apr 16 06:27:37 CEST 2024

Tempo totale richiesto per generare la pagina: 0.00999 secondi
.:: Contatti :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Live Support