2009-10-24 9 views
18

Ho una lista di directory che contengono spazi.Surround tutte le righe in un file di testo con virgolette ('qualcosa')

Ho bisogno di circondarli con '' per garantire che i miei script di batch funzionino.

Come si può circondare ogni nuova riga con un 'e un' (virgolette).

ad es.

File1:

/home/user/some type of file with spaces 
/home/user/another type of file with spaces 

Per

File2:

'/home/user/some type of file with spaces' 
'/home/user/another type of file with spaces' 
+0

È necessario citare gli apostrofi nella stringa? –

+0

Non solo attorno alla stringa. Sai, quindi il mio script non fallisce quando si imbatte in un percorso con uno spazio. – user191960

risposta

28

Usa sed?

sed -e "s/\(.*\)/'\1'/" 

Oppure, come commentato di seguito, se le directory potrebbero contenere apostrofi (incubo se lo fanno) utilizzare questa alternativa

sed -e "s/'/'\\\\''/g;s/\(.*\)/'\1'/" 
+0

Il comando ha funzionato perfettamente - ovviamente se qualcuno dovesse usarlo su un file lo aggiungerebbe alla fine del comando. – user191960

+2

e se il nome del file contiene un apostrofo? – asveikau

+1

Vorrei modificarlo in sed -e "s/'/' \\\\ ''/g; s/\ (. * \)/'\ 1' /" – asveikau

4

Usando sed:

sed -i "s/^.*$/'&'/g" filename 
+0

Non funziona per me Adam - ottieni vari errori a seconda del nome file specifico - forse è necessario -e lì dentro? –

+0

Piuttosto sicuro di aver fatto esattamente quello in cygwin, e ha funzionato. Avrebbe potuto fare un tipo però. –

3

È possibile utilizzare sed(1) per inserire virgolette singole all'inizio e alla fine di ogni riga in un file come così:

sed -i~ -e "s/^/'/;s/$/'/" the_file 
2

logica molto semplice, basta fare eco alle citazioni davanti e dietro.

while read -r line 
do 
    echo "'$line'" 
    # do something 
done < "file" 
+0

Perché tutti i rispondenti e gli elettori precedenti si sono decisi a usare sed? La domanda non l'ha chiesto. funziona? Non ho familiarità con il flusso di controllo di Bash. –

Problemi correlati