Personal tools
Document Actions

Sed afficher portion de texte

by Rakotomandimby Mihamina last modified 2008-07-20 10:49

Soit un fichier structuré d'une manière quelconque. Nous allons essayer d'en extraire une partie.

Cas: Fichier de dump MySQL.

Ce type de fichier est de la forme

INSERT [...]
[...]
[...];
DROP TABLE IF EXISTS xxx;
CREATE TABLE IF NOT EXISTS xxx (
[...]
[...]
) ENGINE=eee CHARSET=ccc;

INSERT [...]
[...]
[...];
DROP TABLE IF EXISTS xxx;
CREATE TABLE IF NOT EXISTS xxx (
[...]
[...]
) ENGINE=eee CHARSET=ccc;

INSERT [...]
[...]
[...];
DROP TABLE IF EXISTS xxx;
CREATE TABLE IF NOT EXISTS xxx (
[...]
[...]
) ENGINE=eee CHARSET=ccc;

Nous remarquons que les déclarations et création des structures sont alternées avec les insertions des données.

Les "insertions"

Nous allons nous donner comme exercice d'extraire uniquement les données.

Ces informations se situent exactement entre un INSERT en début de ligne et un ";" en fin de ligne.

Plus clairement, nous voulons extraire tout ce qui est entre:

INSERT [...]
[...]
[...];
Cela peut se présenter sur une ou plusieurs lignes.

SED: extraction

Pour extraire toutes les portions de texte d'un fichier "monfichier.txt" se situant entre "toto" et "titi", avec SED on ferait:
sed -n "/toto/,/titi/p" < monfichier.txt

Dans notre cas, le délimiteur de début est un INSERT en debut de ligne, tandis que celui de fin est un ";" en fin de ligne. Cela donne:
sed -n "/^INSERT/,/;$/p" < fichier.sql

Maintenant, si on veut juste les créations de tables:
sed -n "/^CREATE/,/;$/p" < fichier.sql