2009-10-24 3 views
18

Ich habe eine Liste von Verzeichnissen, die Leerzeichen enthalten.Umgeben Sie alle Zeilen in einer Textdatei mit Anführungszeichen ('irgendwas')

Ich muss sie mit '' umgeben, um sicherzustellen, dass meine Batch-Skripte funktionieren.

Wie kann man jede neue Zeile mit einem 'und' (Anführungszeichen) umgeben.

z.B.

File1:

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

Um

File2:

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

Müssen Sie in der Zeichenfolge Apostrophe angeben? –

+0

Nein, nur um die Saite. Du weißt - also versagt mein Skript nicht, wenn es auf einen Weg mit einem Raum kommt. – user191960

Antwort

28

Verwendung sed?

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

Oder, wie weiter unten kommentiert, wenn die Verzeichnisse könnten Apostrophe (Alptraum, wenn sie es tun) enthalten verwenden diese alternative

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

Der Befehl funktionierte einwandfrei - offensichtlich sollte jemand diesen Befehl in einer Datei verwenden, die er am Ende des Befehls anhängen würde. – user191960

+2

Was ist, wenn der Dateiname ein Apostroph enthält? – asveikau

+1

Ich würde dies ändern, um sed-e "s/'/' \\\\ ''/g; s/\ (. * \)/'\ 1"/" – asveikau

4

Mit sed:

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

Funktioniert bei mir nicht Adam - verschiedene Fehler je nach Dateiname - vielleicht brauchen -e da drin? –

+0

Ziemlich sicher, dass ich genau das in Cygwin poppte, und es war gut. Könnte aber einen Typ gemacht haben. –

3

Sie sed(1) verwenden können einfache Anführungszeichen am Anfang und Ende jedes einfügen Zeile in einer Datei als so:

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

sehr einfache Logik, man muss nur die Anführungszeichen vor und hinter echo.

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

Warum waren alle Antwortenden und früheren Wähler darauf bedacht, sed zu benutzen? Die Frage hat nicht danach gefragt. Funktioniert das? Ich kenne Bash Control Flow nicht. –