PDA

Visualizza la versione completa : Problemi con sed


farthest
24-07-2005, 11:51
ciao

ho un problema con sed che con altri programmi non capita.
Per esempio prediamo grep, se ho una variabile che indica un file se il filename è composto a uno 'space' con grep posso risolvere in questo modo:

grep "regulare expression" $variabile avrò dei problemi nella individuazione del file se ci metto la virgolette doppie così grep "regulare expression' "$variabile" va tutto a posto.

Con sed invece avrò dei problemi e non riesco a risolvere neanche con le doppie virgolette.

Quello che vi vorrei chiedere è c'è un comando che mi inserisce le backslach nei path dei files in cui ci sono dei [:space:]? in pratica come fa' il tasto TAB.

bye :messner:

br1
24-07-2005, 12:45
Ma di cosa stai parlando? :confused: :master:

Ad occhio sembra linux... :stordita: nel dubbio ti sposto :ciauz:

cacao74
24-07-2005, 12:54
Farthest, forse non ho capito bene la tua richiesta.

Per utilizzare lo slash, devi proteggerlo con il backslack,
ovvero '\/'. Traduciamo in 'codice' quanto detto:



cacao74@server:~$ echo "/home/cacao74" | sed 's/\//_/g'
_home_cacao74

e per renderlo più leggibile all'occhio meno smaliziato,
utilizzando un separatore diverso da '/':

cacao74@server:~$ echo "/home/cacao74" | sed 'sx/x_xg'
_home_cacao74

per la sostituzione degli spazi con uno '/', quindi:

cacao74@server:~$ echo " home cacao74" | sed 'sx\ x/xg'
/home/cacao74



man sed
man bash

ciao

farthest
24-07-2005, 13:03
Mi spiego meglio!!
ho un file che si chiama 'vattela a pesca.txt'
se imposto file=vattela a pesca.txt

e poi cerco ci modificare codesto file con sed

es: sed -r 's/amo/esca/g' $file

non funziona perchè di sono gli spaces se invece file=vattela\ a\ pesca.txt funziona.

se per esempio uso grep
grep "amo" "$file"--> file=vattela a pesca.txt
funziona

Allora ho risolto con `echo $file | sed 's/[[::space]]/\\[[::space]]/g'`.

ma a parte questa, c'è un'altra soluzione?

cacao74
24-07-2005, 14:20
Una variabile contenente spazi, va SEMPRE delimitata da una coppia di apici (singoli o doppi), se non si vuole 'escapare' ogni singolo spazio.



cacao74@server:~$ cat << EOT > "vattela a pesca.txt"
> amo
> lenza
> filo
> EOT

cacao74@server:~$ cat vattela\ a\ pesca.txt
amo
lenza
filo

cacao74@server:~$ sed -i "s/amo/&+esca/" "$file"

cacao74@server:~$ cat $file
amo+esca
lenza
filo


La pagina di manuale di bash offre più informazioni riguardo il 'quoting' delle variabili.

ciao

farthest
24-07-2005, 15:43
Grazie :zizi:

:ciauz:

Loading