Ca va faire quelque temps maintenant que je bloque sur un truc à priori simple.
J'aimerai effacer un bloc dans un fichier si ce bloc match un pattern.
Et comme un exemple vaut mieux qu'un long discours, voilà l'exemple du fichier avec les blocs :
define host {
hostname plop
blablabla
}
define service {
hostname plop
alias LALIAS
command cmd
blablabla blablabla
}
define service {
hostname plop
alias LALIAS2
command cmd2
blabalbla blablabla
}
Le but du jeu est, comme tout le monde l'aura compris, de supprimer un bloc service avec le pattern LALIAS2 sans toucher au reste du fichier évidemment :)
Le shell est ksh.
J'ai bien quelque baffouille en sed si des gens me demande, mais j'ai un peu honte de c'que j'ai pondu :s
Bon, si personne trouve, c'est pas grave, le stagiaire m'a pondu un truc en awk qui a l'air de marcher ; mais vu que j'suis faché avec awk et que je sais que de guru du shell me trouveront un truc elegant/beau (tout l'inverse de awk quoi), je préfère venir vous demander.
D'avance merci!
PS : un pertinentage à celui qui trouve à quel logiciel appartient ce genre de fichier de conf ...
# sed
Posté par Cereal Killer . Évalué à 0.
# le logiciel qui a ce fichier de conf...
Posté par NeoX . Évalué à 0.
fichier TNSNAME.ora
j'ai tout bon ?
[^] # Re: le logiciel qui a ce fichier de conf...
Posté par Barnabé . Évalué à 2.
[^] # Re: le logiciel qui a ce fichier de conf...
Posté par Cereal Killer . Évalué à 1.
# en sed...
Posté par xavier . Évalué à 5.
sed '/service[[:blank:]]\+{/{:load;N;s/}/}/;t blockend;b load;:blockend; /alias[[:blank:]]\+LALIAS2\n/d;}' < input > output
[^] # Re: en sed...
Posté par Cereal Killer . Évalué à 1.
c'est là que j'me sent tout petit et que je vois le chemin qu'y me reste à faire ...
Me reste plusqu'à comprendre ce truc (surtout en les 2 regexp) et j'pourrais l'utiliser.
Merci
# La cavalerie ...
Posté par Sisyphe Plâtrier . Évalué à 2.
http://www.student.northpark.edu/pemente/sed/sedfaq4.html#s4(...)
quelqu'un a donné la solution in extenso :)
Jeqçaqm ;-)
# avec awk
Posté par totof2000 . Évalué à 3.
define host {
hostname plop
blablabla
}
define service {
hostname plop
alias LALIAS
command cmd
blablabla blablabla
}
define service {
hostname plop
alias LALIAS2
command cmd2
blabalbla blablabla
}
awk 'BEGIN{RS="}"} /define/ && !/LALIAS2/ { print $0 "}" }' test1
define host {
hostname plop
blablabla
}
define service {
hostname plop
alias LALIAS
command cmd
blablabla blablabla
}
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.