#1 Le 28/05/2022, à 13:48
- Alarch
[Résolu] Sed Regex Insérer une ligne avant une autre
Bonjour,
mon problème est simple, sqlite ne sait pas insérer un DROP TABLE IF EXISTS `nomtable`; avant le CREATE TABLES IF NOT EXISTS `nomtable` (
je voudrais donc le rajouter à la volée avec sed dans le dump. Pour cela j'ai essayé :
sed '/CREATE TABLE IF NOT EXISTS\(.*\).*(/i DROP TABLE IF EXISTS \1;' dumpdb.sql
Mais le résultat est :
DROP TABLE IF EXISTS 1;
CREATE TABLE IF NOT EXISTS "T_CORP_COR" (
Donc le \1 n'est pas traité comme le contenu de la parenthèse capturante mais littéralement.
Est-ce une mauvaise syntaxe de ma part ou le contenu de \(.*\) ne peut pas être récupéré dans ce cas ? (pas de sed s/)
Je peux bien entendu y arriver avec ça :
sed 's/CREATE TABLE IF NOT EXISTS \(.*\) (/DROP TABLE IF EXISTS \1;\nCREATE TABLE IF NOT EXISTS \1 (/' dumpdb.sql
Mais ça manque d'élégance.
Merci d'avance si quelqu'un peut répondre à la question
Dernière modification par Alarch (Le 28/05/2022, à 14:06)
Hors ligne
#2 Le 28/05/2022, à 13:56
- Watael
Re : [Résolu] Sed Regex Insérer une ligne avant une autre
salut,
sed 's/CREATE TABLE IF NOT EXISTS \(.*\) (/DROP TABLE IF EXISTS \1;\n&/' dumpdb.sql
?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 28/05/2022, à 14:03
- Alarch
Re : [Résolu] Sed Regex Insérer une ligne avant une autre
Oui bonne idée !
On garde ainsi l'avantage des parenthèses capturantes. Je voulais à tout prix utilise le /i pour l'insertion au dessus, alors je me suis obnubilé sur cette syntaxe.
C'est plus compact que ma seconde solution.
Merci de ta raponse.
Hors ligne