Bonjour,

[Flood contexte]
Dans le cadre d'une duplication de base oracle sur AIX, je suis amené a recopier des répertoires, puis a renommer et modifier certains fichiers.
La tâche étant fastidieuse, et courante, je souhaite l'automatiser via un script shell.

J'ai eu quelques soucis pour renommer mes fichiers et répertoires, mais à force de manipuler la commande sed, j'ai fini par aboutir au résultat suivant qui fonctionne.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
  ADB="$1"
  DB="$2"
   # ADB = <ancien_nom_base>
   #  DB = <nouveau_nom_base>
[..]
  # Renomme les repertoires
  ls | grep $ADB | sed "s/\(.*\)$ADB\(.*\)$/mv \"&\" \"\1$DB\2\"/">mv.log
  ls | grep $ADB | sed "s/\(.*\)$ADB\(.*\)$/mv \"&\" \"\1$DB\2\"/" | sh
  # Renomme les fichiers
  find . -print | grep $ADB | sed "s/\(.*\)$ADB\(.*\)$/mv \"&\" \"\1$DB\2\"/">>mv.log
  find . -print | grep $ADB | sed "s/\(.*\)$ADB\(.*\)$/mv \"&\" \"\1$DB\2\"/" | sh
#  cat mv.log
[/Flood contexte]

Il me faut maintenant modifier le contenu d'un fichier qui a l'aspect suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Ligne à supprimer
...
.. (1 à i lignes)
...
Ligne à supprimer
STARTUP NOMOUNT #dernière ligne a supprimer
[Contenu à conserver]
...
.. (1 à j lignes)
...
[Contenu à conserver]
CHARACTER SET WE8ISO8859P1
; #dernière ligne a conserver
Ligne à supprimer
...
.. (1 à k lignes)
...
Ligne à supprimer
ALTER TABLESPACE [..] ADD TEMPFILE [..]
Fin du texte a supprimer
Je ne sais pas vraiment comment procéder.
Je pensais lire le fichier ligne par ligne jusqu'à la lecture de certains mots clefs, rediriger les lignes suivantes dans un fichier jusqu'à lecture des mots clefs suivants.
Cette méthode me pose toutefois quelques problèmes :
  • Les paragraphes encadrer par mes lignes clefs peuvent avoir plusieurs occurences et je ne souhaite garder que la première
  • Le contenu à conserver ne doit pas être impacter par mes conditions
  • Je ne sais pas quel méthode utiliser pour lire mon fichier ligne par ligne

De plus, il existe peut-être une solution plus simple que celle que j'envisage.
Je vous demande donc un avis sur la question plutôt qu'un bout de shell clef en main.