Remplacement uniquement entre 2 lignes
Fermé
santiago69
Messages postés
477
Date d'inscription
mercredi 7 mars 2001
Statut
Membre
Dernière intervention
12 septembre 2016
-
18 nov. 2008 à 19:40
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 20 nov. 2008 à 11:24
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 20 nov. 2008 à 11:24
A voir également:
- Remplacement uniquement entre 2 lignes
- Coco chat remplacement - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- 2 ecran pc - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
- Word numéro de page 1/2 - Guide
10 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
18 nov. 2008 à 20:11
18 nov. 2008 à 20:11
Salut,
sed '\#<Directory /var/www/>#,\#</Directory>#{/allowoverride none/I s/none/all/I}';-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
18 nov. 2008 à 20:12
18 nov. 2008 à 20:12
Salut,
Regarde ici http://www.commentcamarche.net/faq/sujet 5588 sed substitution#bloc
Regarde ici http://www.commentcamarche.net/faq/sujet 5588 sed substitution#bloc
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
19 nov. 2008 à 07:22
19 nov. 2008 à 07:22
Essaye ça alors :
sed '\#<D.* /var/www/>#,\#</Direct.*>#{ \#<D.* /var/www/># { h s#<.*>## x } /AllowOverride/{ H x s/\n// s/none/all/I } }';-))
santiago69
Messages postés
477
Date d'inscription
mercredi 7 mars 2001
Statut
Membre
Dernière intervention
12 septembre 2016
209
18 nov. 2008 à 22:21
18 nov. 2008 à 22:21
Merci jipicy et lami20j,
La syntaxe proposee fonctionne parfaitement. Ce que je demande maintenant n'est que pure fioriture mais j'aimerais bien le solutionner, juste a titre d'exemple :
Supposons que je veuille en plus aligner AllowOverride une tabulation plus loin que <Directory /var/www/>. Un truc du genre :
Pour cela j'ai essaye d'utiliser les references arriere, mais j'obtiens une erreur :
1 Je recupere dans une reference tous les espaces qui precedent la balise
2 Je remplace tout les espace et les # qui precedent la directive...
3 ... par les espace en \1 suivi d'une tabulation et de la directive
Voila la commande en un seul morceau. Je ne vois pas pourquoi elle genere une erreur. Pourriez vous la tester et m'aiguiller ?
Merci d'avance
Santiago
La syntaxe proposee fonctionne parfaitement. Ce que je demande maintenant n'est que pure fioriture mais j'aimerais bien le solutionner, juste a titre d'exemple :
Supposons que je veuille en plus aligner AllowOverride une tabulation plus loin que <Directory /var/www/>. Un truc du genre :
<Directory /var/www/> AllowOverride All
Pour cela j'ai essaye d'utiliser les references arriere, mais j'obtiens une erreur :
sed '\#\([[:space:]]*\)<Directory /var/www/>#I,\#</Directory>#I <----- 1 ------> {s/^[[:space:]#]*AllowOverride None/\1\tAllowOverride All/I}' <---- 2 -----> <-------- 3 -------->
1 Je recupere dans une reference tous les espaces qui precedent la balise
2 Je remplace tout les espace et les # qui precedent la directive...
3 ... par les espace en \1 suivi d'une tabulation et de la directive
Voila la commande en un seul morceau. Je ne vois pas pourquoi elle genere une erreur. Pourriez vous la tester et m'aiguiller ?
$ sed '\#\([[:space:]]*\)<Directory /var/www/>#I,\#</Directory>#I {s/^[[:space:]#]*AllowOverride None/\1\tAllowOverride All/I}' /etc/apache2/sites-available/default sed: -e expression #1, char 118: invalid reference \1 on `s' command's RHS
Merci d'avance
Santiago
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
18 nov. 2008 à 22:48
18 nov. 2008 à 22:48
sed '\#<Directory /var/www/>#,\#</Directory>#{/allowoverride none/I s/none/all/I;s/.*allowoverride.*/\t&/I}'
santiago69
Messages postés
477
Date d'inscription
mercredi 7 mars 2001
Statut
Membre
Dernière intervention
12 septembre 2016
209
18 nov. 2008 à 23:07
18 nov. 2008 à 23:07
merci jipicy,
en fait ton truc marche pas puisqu'il ne fait que decaler la ligne sans se soucier de l'aligner avec la precedente (<Directory /var/www/>).
en fait ton truc marche pas puisqu'il ne fait que decaler la ligne sans se soucier de l'aligner avec la precedente (<Directory /var/www/>).
santiago69
Messages postés
477
Date d'inscription
mercredi 7 mars 2001
Statut
Membre
Dernière intervention
12 septembre 2016
209
20 nov. 2008 à 01:08
20 nov. 2008 à 01:08
WAHHHO, super !
J'ai du me plonger a fond dans la comprehension des fonctions de sed, mais je crois que j'ai compris. J'ai d'ailleurs du faire la petite modif suivante pour que ca marche (ligne 8) :
Pendant qu'on y est, j'ai un autre probleme avec sed... Ou peut etre devrais je faire un nouveau post.
Soit le fichier suivant :
Je voudrais extraire la partie Description avec un script du genre :
Je veux donc afficher tout ce qui se trouve entre "Description:" et "la premiere ligne ne commencant pas par un espace". J'ai essaye le script suivant qui marche presque :
En m'aidant d'un exemple du tutoriel, j'ai essaye de le corriger ainsi, mais ca ne marche pas mieux :
Avez vous un indice ?
Merci d'avance
Santiago
J'ai du me plonger a fond dans la comprehension des fonctions de sed, mais je crois que j'ai compris. J'ai d'ailleurs du faire la petite modif suivante pour que ca marche (ligne 8) :
sed '\#<Directory /var/www/>#,\#</Directory># { \#<Directory /var/www/># { h s#<.*>## x } /AllowOverride/ { s/^[[:space:]#]*/\t/ H x s/\n// s/none/all/I } }'
Pendant qu'on y est, j'ai un autre probleme avec sed... Ou peut etre devrais je faire un nouveau post.
Soit le fichier suivant :
$ cat exemple Titre: Exemple Description: Cette desciption est tres longue, c'est pourquoi elle occupe plusieurs lignes. Date: 19 nov 2008 Version: 1.0.1
Je voudrais extraire la partie Description avec un script du genre :
$ scriptdereve exemple Cette desciption est tres longue, c'est pourquoi elle occupe plusieurs lignes.
Je veux donc afficher tout ce qui se trouve entre "Description:" et "la premiere ligne ne commencant pas par un espace". J'ai essaye le script suivant qui marche presque :
$ sed '/^Description:/,/^[^[:space:]]/!d' exemple Description: Cette desciption est tres longue, c'est pourquoi elle occupe plusieurs lignes. Date: 19 nov 2008
En m'aidant d'un exemple du tutoriel, j'ai essaye de le corriger ainsi, mais ca ne marche pas mieux :
$ sed '/^Description:/,/^[^ ]/{ /^Description:/b;/^[^ ]/b; !d }' exemple Titre: Exemple Description: Cette desciption est tres longue, c'est pourquoi elle occupe plusieurs lignes. Date: 19 nov 2008 Version: 1.0.1
Avez vous un indice ?
Merci d'avance
Santiago
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
20 nov. 2008 à 07:46
20 nov. 2008 à 07:46
Re-
Essaye ça (j'ai supposé que le block pouvait être redondant dans le fichier...) :
Essaye ça (j'ai supposé que le block pouvait être redondant dans le fichier...) :
sed -n '/Description/{h;:z;n;/^ /{H;bz};x;p;b}';-))
santiago69
Messages postés
477
Date d'inscription
mercredi 7 mars 2001
Statut
Membre
Dernière intervention
12 septembre 2016
209
20 nov. 2008 à 09:36
20 nov. 2008 à 09:36
Ayayay !
Encore un truc que je vais devoir decortiquer ! J'ai l'impression d'etre champolion.
Mais tant mieux, je n'apprend jamais autant que par l'exemple.
J'etudie le truc et je reviens vers toi s'il y a des points obscures.
Encore un truc que je vais devoir decortiquer ! J'ai l'impression d'etre champolion.
Mais tant mieux, je n'apprend jamais autant que par l'exemple.
J'etudie le truc et je reviens vers toi s'il y a des points obscures.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
20 nov. 2008 à 11:06
20 nov. 2008 à 11:06
-n Affichage sur demande uniquement /Description/{ Si on rencontre le motif h On place la ligne dans la mémoire annexe :z Etiquette de boucle n On passe à la ligne suivante /^ /{ Si la ligne correspond au motif (ligne commençant par un espace) H On l'ajoute à la mémoire annexe (dans le cas contraire on continue le script après l'accolade) bz On se branche à l'étiquette (boucle) } x Si un motif (espace en début de ligne) n'a pas été trouvé on échange le contenu de l'espace de travail avec le contenu de la mémoire annexe p On l'affiche b On se branche à la fin du script, ce qui a pour effet de charger une nouvelle ligne et de recommencer le traitement au début du script }'
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
20 nov. 2008 à 11:24
20 nov. 2008 à 11:24
Salut,
C'est quoi ton truc : hiragana, katakana ou kanji ?! ;-DDD
C'est quoi ton truc : hiragana, katakana ou kanji ?! ;-DDD