2009-10-24 10 views
18

Mam listę katalogów zawierających spacje.Otacza wszystkie wiersze w pliku tekstowym za pomocą cudzysłowów ("coś").

Muszę otoczyć je znakiem "", aby upewnić się, że moje skrypty wsadowe będą działać.

W jaki sposób można otoczyć każdą nową linię za pomocą "i" (cudzysłów).

np.

File1:

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

Aby

pliku Plik2:

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

Czy chcesz podać apostrofy w łańcuchu? –

+0

Nie tylko wokół sznurka. Wiesz - więc mój scenariusz nie zawodzi, gdy chodzi o ścieżkę z spacją. – user191960

Odpowiedz

28

Korzystając sed?

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

Albo, jak skomentował poniżej, jeśli katalogi mogą zawierać apostrof (koszmar jeśli robią) to wykorzystać alternatywny

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

Polecenie działało idealnie - oczywiście, gdyby ktokolwiek używał tego na pliku, dołaczyłoby to na końcu polecenia. – user191960

+2

co jeśli nazwa pliku zawiera apostrof? – asveikau

+1

Chciałbym zmodyfikować to do sed -e "s/'/' \\\\ ''/g; s/\ (. * \)/'\ 1' /" – asveikau

4

Korzystanie sed:

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

Nie działa dla mnie Adam - otrzymuj różne błędy w zależności od konkretnej nazwy pliku - może potrzebujesz e-tam? –

+0

Jestem pewien, że wpakowałem się dokładnie w cygwin i wszystko poszło dobrze. Mogłaby jednak stworzyć typ. –

3

Można użyć sed(1) wstawić apostrofów na początku i na końcu każdego linia w pliku jako tak:

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

bardzo prosta logika, wystarczy echo cytaty z przodu iz tyłu.

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

Dlaczego wszyscy respondenci i poprzedni wyborcy byli skłonni używać sed? Pytanie nie wymagało tego. czy to działa? Nie jestem zaznajomiony z przepływem sterowania Bash. –

Powiązane problemy