Newsgroup: it.comp.os.linux.iniziare
Titolo: un'espressione per sed che non funziona

Ciao a tutti:
un mio script contiene la seguente espressione:
cat configure.help | sed -n "/$OPTION"'$/{g;1!p;};h'
ma qualcosa non va, perché lanciandolo ottengo l'errore seguente:
sed: -e expression #1, char 26: Unexpected `}'
L'espressione che ho usato è contenuta in sed-handy-one-liners: quello che 
suppongo crei qualche problema è l'uso della variabile $OPTION, o per lo 
meno quello delle doppie "virgole' che ho dovuto usare proprio per 
richiamare $OPTION, come spiegato nel par 4.8. di 'sedfaq'; tuttavia, pur 
avendo girato e rigirato le virgole, non capisco dove sta il problema... 
Avete forse qualche idea?
-- 
... di parti non so niente. Io vado per la mia strada...

 cat configure.help | sed -n "/$OPTION"'$/{g;1!p;};h'
E che cosa dovrebbe fare la sequente espressione?
Davide
-- 
| In a forest a fox bumps into a little rabbit, and says, "Hi, junior,
| what are you up to?"  "I'm writing a dissertation on how rabbits eat
| foxes," said the rabbit.  "Come now, friend rabbit, you know that's
| impossible!"  "Well, follow me and I'll show you."  They both go into 

 
Ciao Davide.
Allora, in pratica mi sto costruendo un configure.help più 'ordinato' di 
quello di default, cioè che segui la sequenza delle opzioni offerta 
all'utente da menuconfig.
Parto dal file .config (anche se, in verità, su questo punto ho qualche 
perplessità), estraggo le opzioni ad una ad una che invio a $OPTION che 
diverrebbe argomento per la funzione 'help' contenuta in 
/usr/src/linux/scripts/Configure; con questa funzione, però, non si ottiene
il 'titolo' di ogni opzione, ad es
'Prompt for development and/or incomplete code/drivers' è il 'titolo' per
CONFIG_EXPERIMENTAL.
L'espressione (see handy-one-liners per sed) dovrebbe appunto copiare la 
riga precedente quella che contiene $OPTION: in .config, ogni opzione è 
preceduta da una breve descrizione del suo ruolo nel kernel.


Ah... se mi chiedi perché l'espressione agirebbe in quel modo non saprei 
risponderti ;]
Però, ad es. prova a lanciare da una shell il comando:
# cat configure.help | sed -n '/CONFIG_X86$/{g;1!p;};h'
Dovresti ottenere:
# Intel or compatible 80x86 processor
Se invece ti dimentichi della regexp '$' il risultato è diverso, perché non 
c'è un'unica opzione che inizi per CONFIG_X86... Al contrario io voglio solo 
beccare quella precisa opzione.
Per 'riempire' il mio personalissimo configure.help uso un ciclo while, 
perciò l'espressione in questione dovrà contenere una variabile che accolga 
una ad una le opzioni che il ciclo le passa; ho chiamato $OPTION la 
variabile.
Se vuoi inserire una variabile in un'espressione per sed devi usare le 
doppie virgole (") al posto delle singole (')
Da sedfaq:
4.8. How do I read environment variables with sed?
4.8.1. - on Unix platforms
...
To ALLOW the Unix shell to interpret the dollar sign (replacing it
   with an environment variable), put the script in double quotes:
...
To demonstrate with the example two sentences above:
      sed 'like so'"$HERE"'sed should set the meaning'  # rough idea
      sed "s/$user"'$/root/' input.file >output.file    # sample use
Il problema è che l'espressione con variabile non mi dà alcun output :(
Ho provato ad usare un ciclo 'corto', ad es. per 3 opzioni ma... nisba!
Invece, se al prompt sostituisco la variabile con un'esplicita opzione tutto 
va come previsto: mah!
