script pour compter 840 caractères et insérer un caractèr e de continuation de ligne
12 réponses
patrick heraud
bonjour,
je cherche à insérer un caractère '\' dans une chaîne composée de
caractères alphanumériques et de '.'
Cette insertion doit se situer avant le 850 ème caractère et être suivie
d'un saut de ligne.
Pour ceux qui connaissent, c'est pour transformer des règles SNORT au
format 2.7 en règles au format 2.3 (qui limite le nombre de caractères
d'une ligne à 850 maxi).
Je pense qu'un script avec awk ou sed peut faire ça:
- quelqu'un peut-il m'aider?
Merci.
Question subsidiaire:
- est-ce que SNORT 2.7 est gourmand en ressources au point d'être
inutilisable sur un SEMPRON 2800?
Merci encore.
--
-----------------------------------------------------------------------
Ma cle GPG est disponible sur http://www.keyserver.net (0x3E8D8B07)
A6FD F7B5 1D15 0294 F4E1 E6D8 C873 E9AB 3E8D 8B07
-----------------------------------------------------------------------
*** Devenez Parrain/Marraine Linux: http://parrains.linux.free.fr/ ***
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Le Thu, 21 May 2009 00:48:16 +0200 Fanfan a écrit:
Le Wednesday 20 May 2009 à 19:22:00 (+0200), Gilles MISSONNIER a écrit : > le pb : > comment insérer un caractère "retour à la ligne" quand on a les 2 > conditions : > 1- on a dépassé 70 caractères d'affilé ("blanc ou pas") > 2- on continue jusqu'à ce que l'on recontre un "blanc" > (on peut considérer que le blanc rencontré devra être supprimé) > > aucune des solutions suggérées ne fonctionne : > par exemple, j'ai un fichier de 2 lignes de 200 caractères chacunes, > je voudrais idéalement si les longueurs des mots le permettent : > 70 > 70 > 60 > 70 > 70 > 60 > > > et non pas > 70 > 130 > 70 > 130
D'après ton énoncé, les seules lignes en sortie qui feront moins de 70 caracteres faisaient déjà moins de 70 caractères en entrée. Toutes les autres feront obligatoirement 70 caractères minimum plus éventuellement un mot (dont la longueur est indéfinie). Ce n'est donc pas cohérent avec les exemples que tu donnes. Je crois que nos deux solutions respectent ton énoncé. Mais ton énoncé respecte-t-il ce que tu souhaites ?
Les conditions de césure sont bien 1 ET 2, pas 1 OU 2 ? En gros, ton énoncé dit que tu coupes la ligne au premier espace rencontré au dela du 70ème caractère.
Le cas qui se pose peut etre est si ce comportement doit etre recursif. C'est certainement là que nos lignes ne te conviennent pas. Il me semblait que le modificateur 'g' aurait du faire l'affaire, mais je viens de tester et ca ne marche apparemment pas. Un autre sur la liste aura certainement le detail qui nous manque.
sed -i -e '1,$s/(.{70}[^ ]*) /1XXXn/g' fichier
fait ce que tu veux en insérant XXX à la fin de la ligne.
-- Pour se marier, il faut un témoin, comme pour un accident ou un duel. [ Sacha Guitry ]
-- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe" vers En cas de soucis, contactez EN ANGLAIS
Le Thu, 21 May 2009 00:48:16 +0200
Fanfan <francois@cerbelle.net> a écrit:
Le Wednesday 20 May 2009 à 19:22:00 (+0200), Gilles MISSONNIER a écrit :
> le pb :
> comment insérer un caractère "retour à la ligne" quand on a les 2
> conditions :
> 1- on a dépassé 70 caractères d'affilé ("blanc ou pas")
> 2- on continue jusqu'à ce que l'on recontre un "blanc"
> (on peut considérer que le blanc rencontré devra être supprimé)
>
> aucune des solutions suggérées ne fonctionne :
> par exemple, j'ai un fichier de 2 lignes de 200 caractères chacunes,
> je voudrais idéalement si les longueurs des mots le permettent :
> 70
> 70
> 60
> 70
> 70
> 60
>
>
> et non pas
> 70
> 130
> 70
> 130
D'après ton énoncé, les seules lignes en sortie qui feront moins de 70
caracteres faisaient déjà moins de 70 caractères en entrée. Toutes les
autres feront obligatoirement 70 caractères minimum plus éventuellement
un mot (dont la longueur est indéfinie). Ce n'est donc pas cohérent avec
les exemples que tu donnes. Je crois que nos deux solutions respectent
ton énoncé. Mais ton énoncé respecte-t-il ce que tu souhaites ?
Les conditions de césure sont bien 1 ET 2, pas 1 OU 2 ?
En gros, ton énoncé dit que tu coupes la ligne au premier espace
rencontré au dela du 70ème caractère.
Le cas qui se pose peut etre est si ce comportement doit etre recursif.
C'est certainement là que nos lignes ne te conviennent pas. Il me
semblait que le modificateur 'g' aurait du faire l'affaire, mais je
viens de tester et ca ne marche apparemment pas. Un autre sur la liste
aura certainement le detail qui nous manque.
sed -i -e '1,$s/(.{70}[^ ]*) /1XXXn/g' fichier
fait ce que tu veux en insérant XXX à la fin de la ligne.
--
Pour se marier, il faut un témoin, comme pour un accident ou un duel.
[ Sacha Guitry ]
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Le Thu, 21 May 2009 00:48:16 +0200 Fanfan a écrit:
Le Wednesday 20 May 2009 à 19:22:00 (+0200), Gilles MISSONNIER a écrit : > le pb : > comment insérer un caractère "retour à la ligne" quand on a les 2 > conditions : > 1- on a dépassé 70 caractères d'affilé ("blanc ou pas") > 2- on continue jusqu'à ce que l'on recontre un "blanc" > (on peut considérer que le blanc rencontré devra être supprimé) > > aucune des solutions suggérées ne fonctionne : > par exemple, j'ai un fichier de 2 lignes de 200 caractères chacunes, > je voudrais idéalement si les longueurs des mots le permettent : > 70 > 70 > 60 > 70 > 70 > 60 > > > et non pas > 70 > 130 > 70 > 130
D'après ton énoncé, les seules lignes en sortie qui feront moins de 70 caracteres faisaient déjà moins de 70 caractères en entrée. Toutes les autres feront obligatoirement 70 caractères minimum plus éventuellement un mot (dont la longueur est indéfinie). Ce n'est donc pas cohérent avec les exemples que tu donnes. Je crois que nos deux solutions respectent ton énoncé. Mais ton énoncé respecte-t-il ce que tu souhaites ?
Les conditions de césure sont bien 1 ET 2, pas 1 OU 2 ? En gros, ton énoncé dit que tu coupes la ligne au premier espace rencontré au dela du 70ème caractère.
Le cas qui se pose peut etre est si ce comportement doit etre recursif. C'est certainement là que nos lignes ne te conviennent pas. Il me semblait que le modificateur 'g' aurait du faire l'affaire, mais je viens de tester et ca ne marche apparemment pas. Un autre sur la liste aura certainement le detail qui nous manque.
sed -i -e '1,$s/(.{70}[^ ]*) /1XXXn/g' fichier
fait ce que tu veux en insérant XXX à la fin de la ligne.
-- Pour se marier, il faut un témoin, comme pour un accident ou un duel. [ Sacha Guitry ]
-- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe" vers En cas de soucis, contactez EN ANGLAIS
Jacques L'helgoualc'h
Fanfan a écrit, jeudi 21 mai 2009, à 00:48 : [...]
Le cas qui se pose peut etre est si ce comportement doit etre recursif. C'est certainement là que nos lignes ne te conviennent pas. Il me semblait que le modificateur 'g' aurait du faire l'affaire, mais je viens de tester et ca ne marche apparemment pas. Un autre sur la liste aura certainement le detail qui nous manque.
| François : | sed -e '1,$s/(^.{70}[^ ]*) /1n/g' fichier
Cette option « g » est inutile, à cause de l'ancrage initial « ^ » ...
| Fanfan : | sed 's/(.{70,70}[^ ]*) (.+)$/1n2/' fichier
... et celle-ci à cause de l'ancrage final « $ » (et/ou de l'avidité du +). L'option « g » répète le traitement de chaînes /distinctes/ :
# label : :A # substitution : s/([^n]{7}[^ n]*) ([^ n])/1n2/ # et tant qu'elle réussit, retour à A : tA
-- Jacques L'helgoualc'h
-- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe" vers En cas de soucis, contactez EN ANGLAIS
Fanfan a écrit, jeudi 21 mai 2009, à 00:48 :
[...]
Le cas qui se pose peut etre est si ce comportement doit etre recursif.
C'est certainement là que nos lignes ne te conviennent pas. Il me
semblait que le modificateur 'g' aurait du faire l'affaire, mais je
viens de tester et ca ne marche apparemment pas. Un autre sur la liste
aura certainement le detail qui nous manque.
| François :
| sed -e '1,$s/(^.{70}[^ ]*) /1n/g' fichier
Cette option « g » est inutile, à cause de l'ancrage initial « ^ » ...
| Fanfan :
| sed 's/(.{70,70}[^ ]*) (.+)$/1n2/' fichier
... et celle-ci à cause de l'ancrage final « $ » (et/ou de l'avidité du
+). L'option « g » répète le traitement de chaînes /distinctes/ :
# label :
:A
# substitution :
s/([^n]{7}[^ n]*) ([^ n])/1n2/
# et tant qu'elle réussit, retour à A :
tA
--
Jacques L'helgoualc'h
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Fanfan a écrit, jeudi 21 mai 2009, à 00:48 : [...]
Le cas qui se pose peut etre est si ce comportement doit etre recursif. C'est certainement là que nos lignes ne te conviennent pas. Il me semblait que le modificateur 'g' aurait du faire l'affaire, mais je viens de tester et ca ne marche apparemment pas. Un autre sur la liste aura certainement le detail qui nous manque.
| François : | sed -e '1,$s/(^.{70}[^ ]*) /1n/g' fichier
Cette option « g » est inutile, à cause de l'ancrage initial « ^ » ...
| Fanfan : | sed 's/(.{70,70}[^ ]*) (.+)$/1n2/' fichier
... et celle-ci à cause de l'ancrage final « $ » (et/ou de l'avidité du +). L'option « g » répète le traitement de chaînes /distinctes/ :
# label : :A # substitution : s/([^n]{7}[^ n]*) ([^ n])/1n2/ # et tant qu'elle réussit, retour à A : tA
-- Jacques L'helgoualc'h
-- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe" vers En cas de soucis, contactez EN ANGLAIS