2016-07-26 19 views
3

Ich versuche, sed zu verwenden, um Anführungszeichen um Dezimalwerte in einem mysql-Dump hinzuzufügen. Die Linien folgen dem Format unter:Hinzufügen von Anführungszeichen zu MySQLdump mit Sed

INSERT INTO .... 'LastName', 1356.183); 

Ich versuche, den letzten Wert (in diesem Fall 1356,183) in Anführungszeichen zu kapseln, die in den folgenden Folge hätte: Ich habe bisher

INSERT INTO .... 'LastName', '1356.183'); 

versucht Variationen über die folgende sed Befehl ohne Glück:

sed -i '.bak' "s/, \(\d+.\d+\))/, '\1')/g" test.txt 

Irgendwelche Empfehlungen für die Regex sollte ich verwenden? Vielen Dank!

+0

Versuchen Sie mit 'sed -i '.bak'" s/\ (\ d +. \ D + \)/'\ 1'/g "test.txt' –

+0

Warum müssen Sie Zahlen angeben? Das 'INSERT' sollte gut mit oder ohne Anführungszeichen funktionieren. –

Antwort

0

Sehr wenige Werkzeuge erkennen \d als eine Ziffer und + ist ein ERE-Metazeichen, nicht BRE als sed wird standardmäßig unterstützt. Verwenden Sie einfach [0-9] statt \d und die Flucht der + es als ERE metacharacter in einem POSIX zu aktivieren sed:

$ sed 's/[0-9]\+\.[0-9]\+/'\''&'\''/' file 
INSERT INTO .... 'LastName', '1356.183'); 

ich auch die . entkam zu deaktivieren metacharacter Eigenschaften ist, und fixiert Ihren zitiert (zur Vermeidung von über unerwartete Auslösung Folgen, nie Verwenden Sie doppelte Anführungszeichen um jedes Skript - immer einfache Anführungszeichen verwenden und sie zu beenden nur um jeden Teil müssen Sie die Shell erweitern können, zB sollten Sie tun sed 's/'"$var"'/whatever/', nicht sed "s/$var/whatever/").

Verwandte Themen