Je ne peux pas sembler trouver un bon moyen de le faire en utilisant les commandes Unix / Linux (sans écrire un script). Je pense que cela peut être fait, cependant.
Ce que je veux faire est de lire le contenu d’un fichier, de le séparer par un délimiteur, puis de supprimer les segments qui ne correspondent pas à un RegEx (essentiellement, un problème de réduction de filtre de carte).
quelque chose comme
cat original-file.sql | split --separator=';' | pcregrep -M '(.|\n)*needed_schema(.|\n)*' | result-file.sql
de sorte que le fichier de résultats ne contienne que des instructions SQL incluant “needed_schema” dans l’instruction.
original-file.sql
SELECT * FROM information_schema.tables WHERE table_schema = 'public' ; SELECT * FROM needed_schema.some_table WHERE some_col = 'some value' ; SELECT * FROM needed_schema.some_other_table WHERE some_other_col = 'some other value' ;
fichier-résultat.sql
SELECT * FROM needed_schema.some_table WHERE some_col = 'some value' ; SELECT * FROM needed_schema.some_other_table WHERE some_other_col = 'some other value' ;
Pensez à utiliser awk et à assigner RS
(Record Separator) et ORS
(Output Record Separator):
$ awk '/needed_schema/' RS=';' ORS=';' input SELECT * FROM needed_schema.some_table WHERE some_col = 'some value' ; SELECT * FROM needed_schema.some_other_table WHERE some_other_col = 'some other value' ;
Le regex n’est pas PCRE mais l’expression régulière étendue