2009-10-24 6 views
18

Tengo una lista de directorios que contienen espacios.Rodea todas las líneas en un archivo de texto con comillas ('algo')

Tengo que rodearlos con '' para asegurarme de que mis scripts por lotes funcionen.

Cómo se puede rodear cada nueva línea con 'y a' (comillas).

p. Ej.

Fichero 1:

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

Para

archivo2:

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

¿Necesitas citar apóstrofes en la cadena? –

+0

No solo alrededor de la cadena. Ya sabes, mi guión no falla cuando se trata de un camino con un espacio. – user191960

Respuesta

28

usar sed?

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

O, como se ha comentado más abajo, si los directorios pueden contener apóstrofes (pesadilla si lo hacen) utiliza esta alternativa

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

El comando funcionó perfectamente; obviamente, si alguien utilizara esto en un archivo, lo agregaría al final del comando. – user191960

+2

¿y si el nombre de archivo contiene un apóstrofo? – asveikau

+1

Me gustaría modificar esto a sed -e "s/'/' \\\\ ''/g; s/\ (. * \)/'\ 1' /" – asveikau

4

usando sed:

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

No funciona para mí Adam - recibe varios errores dependiendo del nombre de archivo particular - ¿tal vez necesite -e allí? –

+0

Estoy seguro de que inserté exactamente eso en cygwin, y me fue bien. Podría haber hecho un tipo sin embargo. –

3

Puede utilizar sed(1) para insertar comillas simples al principio y al final de cada línea en un archivo como tal:

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

lógica muy simple, sólo tiene que repetir las frases delante y detrás.

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

¿Por qué todos los que respondieron y los votantes anteriores se inclinaron a usar sed? La pregunta no fue solicitada. ¿Esto funciona? No estoy familiarizado con el flujo de control de Bash. –

Cuestiones relacionadas