Sed afficher portion de texte
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