Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

script pour compter 840 caractères et insérer un caractèr e de continuation de ligne

12 réponses
Avatar
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

2 réponses

1 2
Avatar
François Boisson
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 ?

[ ShLvl:1 Cmd:505 Ret:0 jeu mai 21 00:30:11 ]
~ $ echo "azehjg akjhzrg aekrhg ezrkhgz erzrkjhgzer zekrgezr kezrezk
zerkzer zkerz rzekr z" | wc
1 11 81
[ ShLvl:1 Cmd:505 Ret:0 jeu mai 21 00:30:15 ]
~ $ echo "azehjg akjhzrg aekrhg ezrkhgz erzrkjhgzer zekrgezr kezrezk zerkzer
zkerz rzekr z" | sed 's/(.{70,70}[^ ]*) (.+)$/1n2/' azehjg akjhzrg
aekrhg ezrkhgz erzrkjhgzer zekrgezr kezrezk zerkzer zkerz rzekr z

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.

jksdddf fsddddddddddddddddd fsddddddddddddddddddddd fsddddddddddddddddxxxddddfdsssssssssssssssssssssssssssssssssssss dffffffffff dfdfd df jksdddf fsddddddddddddddddd fsddddddddddddddddddddd fsddddddddddddddddxxxddddfdsssssssssssssssssssssssssssssssssssss dffffffffff dfdfd df jksdddf fsddddddddddddddddd fsddddddddddddddddddddd fsddddddddddddddddxxxddddfdsssssssssssssssssssssssssssssssssssss dffffffffff dfdfd df

sdfsdf
fsd
sdfdsfds sdf jdddddddddddd dddddddddddd dddddddddddddd dddddddddddddd dddddddddddddddddddd ddddddddd dddddddddddd ddddddddd

est transformé en

jksdddf fsddddddddddddddddd fsddddddddddddddddddddd fsddddddddddddddddxxxddddfdsssssssssssssssssssssssssssssssssssssXXX
dffffffffff dfdfd df jksdddf fsddddddddddddddddd fsdddddddddddddddddddddXXX
fsddddddddddddddddxxxddddfdsssssssssssssssssssssssssssssssssssss dffffffffffXXX
dfdfd df jksdddf fsddddddddddddddddd fsddddddddddddddddddddd fsddddddddddddddddxxxddddfdsssssssssssssssssssssssssssssssssssssXXX
dffffffffff dfdfd df

sdfsdf
fsd
sdfdsfds sdf jdddddddddddd dddddddddddd dddddddddddddd dddddddddddddd dddddddddddXXX
ddddddddd ddddddddd dddddddddddd ddddddddd


François Boisson


Fanfan

--
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
Avatar
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/ :

~ $ echo 12345678 123456789 abc| sed 's/(.{7}[^ ]*) /1n/g'
12345678
123456789
abc

mais si la regexp doit mordre le mot suivant, on peut faire une boucle

~ $ echo "1234567 12345678 123456789 " |
sed -re ':A;s/([^n]{7}[^ n]*) ([^ n])/1n2/;tA'
1234567
12345678
123456789

# 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
1 2