Newsgroup: it.comp.os.linux.iniziare
Titolo: Sto impazzendo con "sed". Quale NG?

Come da oggetto. Per problemi di questo genere (in pratica
non mi fungono i sub-patterns) qual è il NG giusto per
chiedere?
thanks!
Apx.
-- 
Vorrei morire dormendo come mio nonno
e non urlando come i suoi passeggeri.

 fungono i sub-patterns) qual è il NG giusto per chiedere?
questo

 questo
Mmmm sicuro? :) A me non sembra troppo un problema di uso del
S.O., e mi scoccerebbe contribuire agli OT qui... Comunque
eccolo qua.
Ho un file sorgente in "c" in cui devo cambiare nomi a una
serie di identificatori con l'opzione che per un editor
sarebbe "solo parole intere". Ho scritto un file di
comandi per sed che invoco così:
sed  -f  filename_commands  file_ingresso.c > file_out.c
Ogni linea del file comandi contiene una cosa del genere:
s/([ \*])old_string([ \;\:\(\)\[\]])/\1replacement_string/\2g
Nelle mie intenzioni dovrebbe cercare qualsiasi stringa
inizi per spazio o carattere '*' (nel caso abbia qualcosa
del tipo "void *ptr;"), poi l'identificatore da cercare,
poi ancora spazio, punto e virgola, due punti, parentesi
tonda aperta e chiusa, parentesi quadra aperta e chiusa (e
temo che ancora manchi qualcosa nella sintassi del "c"). E
per giunta ho anche identificatori a inizio linea ma non
trovo qual è il carattere corrispondente su nessun tutorial.
Mi aspetterei che quello che precede la stringa sia
ricordato come "\1" e quello che la segue come "\2". Ma
quando vado a invocare sed, a seconda delle varianti che
tento su quel genere di comando il file modificato risulta
vuoto oppure identico all'originale. Ho provato anche a
racchiudere il comando tra virgolette semplici e doppie ma
niente.
Cosa sbaglio???


 niente.
Mi pare che si debba usare \(...\) per catturare e avere le
backreference \1, \2 dopo.
Esempio:
echo abc | sed 's/\(.\)b\(.\)/\1X\2/'
aXc
-- 
Cio' che si vede, e'.

 corrispondente su nessun tutorial.
guarda fammi un esempio concreto che non c'ho capito niente :)

 chiedere?
Questo, poni la domanda.

 ...
Secondo me basta che tu faccia:
sed 's/\bold_id_1\b/new_id_1/g
     s/\bold_id_2\b/new_id_2/g
...
     s/\bold_id_n\b/new_id_n/g
' infile.c > outfile.c
ma non riuscendo a capire cosa tu vuoi veramente fare
non so se questo basti per i tuoi scopi.
Inoltre stai sbagliando tutti igli escape. Cioè:
( e )  corrispondono alle normali parentesi
\( e \)  sono gli operatori di ragruppamento
e così via.

 avere le backreference \1, \2 dopo.
Grazieeeee! Ha funto ma a caro prezzo, spero di aver
"preso" tutte le possibilità che possono capitare. Ecco un
esempio del mostro che è venuto fuori :)
s/\([[:space:]\*\.,;\(\)\+\-\/\&^]\)SCommand_GeneralParams\([[:space:]\.;:\(\)\+\-\*\/\&$]\)/\1StructGeneral_Params\2/g
Grande NG!!!!
ciao!


 Grande NG!!!!
  Attento Marco, che Archeo per ringraziarti potrebbe portarti una bambola
gonfiabile a casa nel pieno della notte senza preavviso!
  Ciao,
-- 
Alessandro Selli, 
http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.
Chiave PGP/GPG: EC885A8B

 notte senza preavviso!
quando stavo aprendo il portabagagli dicendoti che stavo
per consegnartela, posso assicurarti che avevi l'aspetto
di quello che ci credeva davvero. O sei un attore
eccezionale tu, o io sono un attore decente :P
ancora grazie a tutti voi!
Apx
