Récemment je devais transformer cette commande SQL
INSERT INTO my_table VALUES (1,'blabal bla'),(2,'bloblo blo'),(3,'blibli bli')"
Par celle ci :
INSERT INTO my_table VALUES (1,'0','blabal bla'),(2,'0','bloblo blo'),(3,'0','blibli bli')
Pour y arriver j'ai utilisé sed, en mode rechercher remplacer sed "s/string-to-replace/new-string/g"
Mais en réalité je n'ai pas de besoin de remplacer une chaîne de caractère mais simplement d'insérer la chaîne suivante ",'0'" à un endroit précis.
Pour cela j'utilise les 'match parenthesis' (je ne sais pas si ça s'appelle vraiment comme ça).
Voici un exemple :
echo "tata, titi, tutu" | sed "s/,\(\w*\)/,'string inserted',\1/g" tata,'string inserted', titi,'string inserted', tutu
A l'intérieur des parenthèses \( \) (Attention il faut les précédé d'un antislash) je choisi un chaîne particulière.
Ensuite dans la deuxième partie de mon sed je peut injecter cette chaine via \1.
Finalement voici ma commande :
sed "s/(\(\w*\),/(\1,'0',/g" myFile.sql
Et voici le test pour reproduire le cas chez soi:
echo "INSERT INTO my_table VALUES (1,'blabal bla'),(2,'bloblo blo'),(3,'blibli bli')" | sed "s/(\(\w*\),/(\1,'0',/g" INSERT INTO my_table VALUES (1,'0','blabal bla'),(2,'0','bloblo blo'),(3,'0','blibli bli')
Aucun commentaire:
Enregistrer un commentaire