Bienvenue visiteur (Inscription |  Connexion)
Qui est en ligne ?
Il y a : 14 utilisateurs en ligne, consultez le détail
Auteur Message
zephyroth
#0 Message posté le : 12-05-2008 à 16:00:47


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 13-07-2005
Nombre de messages : 206
Bonjour @ tous !

Bon le titre ne reflète pas réellement ma question puisque je sais que la commande :
sed -n '/balise1/;/balise2/{//d;p;}' fichier.txt

permet d'obtenir l'intervalle compris entre les balises "balise 1" et "balise 2" exclues.

Seulement je ne sais pas comment arrêter la recherche à la première occurrence de "balise 2" ... Quelqu'un peut me filer un coup de pouce ?

--Message édité par zephyroth le 12-05-2008 à 16:01:12--
zephyroth
#1 Message posté le : 23-05-2008 à 15:15:31


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 13-07-2005
Nombre de messages : 206
Bon je relance car je n'ai toujours pas trouvé ...
Azollyx
#2 Message posté le : 23-05-2008 à 19:05:49


Naboo


Forum : Modérateur
Association : Président
Arrivé(e) le : 09-04-2006
Nombre de messages : 2032
Avec sed uniquement, je n'ai pas vu de possibilité. Après je suis loin d'être un expert sed...
Mais j'aurais peut-être une idée : récupérer les numéros de lignes avant d'utiliser sed.

Essaye ça pour récupérer les numéros de ligne :
cat -n "$f" | grep XXX | head -1 | awk '{print $1}'

- cat -n : on ajoute les numéros de lignes ;
- grep XXX : on récupère les lignes contenant XXX ;
- head -1 : on se limite à la première ligne ;
- awk '{print $1}' : on sélectionne le numéro de la ligne

Maintenant, ça donne :
numeroPremiereOccurence() {
cat -n "$1" | grep "$2" | head -1 | awk '{print $1}'
}
f=fichier.txt
sed -n "/`numeroPremiereOccurence "$f" "balise1"`/;/`numeroPremiereOccurence "$f" "balse2"`/{//d;p;}" "$f"


--Message édité par Azollyx le 23-05-2008 à 19:06:01--


-------------------------------------
La force vaincra ! :D