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

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacques L'helgoualc'h
Le #19355041
patrick heraud a écrit, dimanche 17 mai 2009, à 19:32 :
bonjour,



bonsoir (ou bisouxxxxii),

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?



Info sed (GNU) t'aidera,

~ $ echo 123456789abcdefghij | sed -re 's/.{6}/&\n/g'
123456
789abc
defghi
j

mais on peut raffiner un peu la position des césures si besoin.

Merci.



de rien,
--
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
Gilles MISSONNIER
Le #19365791
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.

---1480404480-1297462173-1242722240=:4995
Content-Type: TEXT/PLAIN; CHARSET=UTF-8
Content-Transfer-Encoding: QUOTED-PRINTABLE
Content-ID:
raffinons ! raffinons ! :

aux experts de sed | awk | perl | sh : (Jacques ?)

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"


je suis sûr qu'il y aura des preneurs ...

----------------------------------------------------------------


On Sun, 17 May 2009, Jacques L'helgoualc'h wrote:

+> patrick heraud a écrit, dimanche 17 mai 2009, à 19:32 :
+> > bonjour,
+>
+> bonsoir (ou bisouxxxxii),
+>
+> > 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 SNOR T au
+> > format 2.7 en règles au format 2.3 (qui limite le nombre de carac tères
+> > d'une ligne à 850 maxi).
+> > Je pense qu'un script avec awk ou sed peut faire ça:
+> > - quelqu'un peut-il m'aider?
+>
+> Info sed (GNU) t'aidera,
+>
+> ~ $ echo 123456789abcdefghij | sed -re 's/.{6}/&\n/g'
+> 123456
+> 789abc
+> defghi
+> j
+>
+> mais on peut raffiner un peu la position des césures si besoin.
+>
+> > Merci.
+>
+> de rien,
+>

--

_-¯-_-¯-_-¯-_-¯-_
Gilles Missonnier
IAP -
01 44 32 81 36
---1480404480-1297462173-1242722240=:4995--

--
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
François Boisson
Le #19366041
Le Tue, 19 May 2009 10:54:18 +0200 (CEST)
Gilles MISSONNIER
raffinons ! raffinons ! :

aux experts de sed | awk | perl | sh : (Jacques ?)

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"




sed -e -i '1,$s/(^.{70}[^ ]*) /1n/g' fichier

devrait faire cela

François Boisson

--
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
Le #19366161
--7JfCtLOvnd9MIVvH
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Le Tuesday 19 May 2009 à 10:54:18 (+0200), Gilles MISSONNIER a écrit :
raffinons ! raffinons ! :
aux experts de sed | awk | perl | sh : (Jacques ?)
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"
je suis sûr qu'il y aura des preneurs ...



On est en plein dans le HS.

Il y a certainement mieux, mais cette ligne SED fonctionne. Je suis
parti du principe que tu voulais remplacer (cad supprimer) le caractère
blanc par un retour à la ligne.

sed 's/(.{70,70}[^ ]*) (.+)$/1n2/'


Explication :

(.{70,70}[^ ]*)

Je grignotte 70 caractères (quelque soient les caractères) suivis d'un
ou plusieurs caractères différents d'espace et je mémorise dans 1
Ainsi, si ca existe dans la ligne, j'ai consommé les 70 premiers
caractères suivi des caractères différents de espace. J'ai donc en
mémoire la sous chaine qui précédera eventuellement le retour à la
ligne.

L'espace à l'extérieur des parenthèses est là pour être consomm é par la
regex sans être mémorisé, de façon à être remplacé par le ret our à la
ligne si la regex peut s'appliquer. Ce n'était pas spécifié, mais ç a m'a
semblé logique. Si l'espace doit être conservé avant le retour à la
ligne, il suffit de le déplacer avant la fermeture des parenthèses,
sinon, s'il doit se retrouver en début de ligne, il suffit de le
supprimer de la regex.

(.+)$
Je grignotte au moins un caractère (quel qu'il soit) jusqu'à la fin de
la ligne et je mémorise dans 2
Je m'assure qu'il y a bien des caractères après mon point d'insertion.
Sinon, je risque d'insérer un retour à la ligne alors que je suis déj à
en fin de ligne. Ce n'était pas spécifié, mais ça m'a semblé logi que. Si
ce n'est pas nécessaire, il suffit de supprimer cette partie de la
regex.

1n2
J'écris la première chaîne mémorisée (au moins 70 caractères su ivis d'un
nombre quelconque de caractères différents d'espace), un retour à la
ligne et la seconde chaine mémorisée (caractères restants sur la lign es
après l'espace de césure).

Voila, avec une explication. Mais d'autres feront certainement bien
mieux que moi avec des regex.


--
Le mystère de l'incarnation se répète en chaque femme ; tout enfant
qui naît est un Dieu qui se fait homme.
[ Simone de Beauvoir ]

--7JfCtLOvnd9MIVvH
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iD8DBQFKEnlzn0FdfiSfsswRAigzAKCAukJa4TXSaNoXU3Np2HL7HSO2OQCfVHr9
6iFBwmCnHLfh0NYqN5C2dV0 =Mzjv
-----END PGP SIGNATURE-----

--7JfCtLOvnd9MIVvH--

--
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
Le #19366411
Gilles MISSONNIER a écrit, mardi 19 mai 2009, à 10:54 :
raffinons ! raffinons ! :

aux experts de sed | awk | perl | sh : (Jacques ?)



Sh, bof --- tu /peux/ le faire...

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"



sed -re 's/.{42,70}[[:blank:]]/&\n/g'

va avoir une certaine élasticité ; pour ne pas te casser la tête avec un
unique script sed compliqué, tu peux piper dans un second rigide pour
casser les lignes trop longues que laisse passer le premier :

sed -re 's/.{42,70}[[:blank:]]/&\n/g' |
sed -re 's/.{70}/&\n/g'


P.S. Je lis la liste, inutile de me mettre en Cc:.
--
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
Le #19367091
--NKoe5XOeduwbEQHU
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Le Tuesday 19 May 2009 à 11:51:52 (+0200), Jacques L'helgoualc'h a écri t :
> 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"

sed -re 's/.{42,70}[[:blank:]]/&\n/g'



Tu fais ta césure avant le 70 eme caractère, ce qui ne correspond pas à
la condition 1.

Il me semblait que le quantificateur {} était avide et allait avaler
tous les caractères jusqu'à 70, même si on trouve un blanc entre 42 et
70. Me gourre-je ?

va avoir une certaine élasticité ; pour ne pas te casser la tête av ec un
unique script sed compliqué, tu peux piper dans un second rigide pour
casser les lignes trop longues que laisse passer le premier :
sed -re 's/.{42,70}[[:blank:]]/&\n/g' |
sed -re 's/.{70}/&\n/g'



En fait, la, tu vas couper à 70, même au milieu d'un mot. Au final,
toutes tes lignes feront moins de 71 caractères, avec une césure en
plein mot. Non ?

Fanfan

--
Après tout, il faut avoir une jeunesse. L'âge où l'on se décide à être
jeune importe peu...
[Henri Duvernois]

--NKoe5XOeduwbEQHU
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iD8DBQFKEpctn0FdfiSfsswRArtRAKDLMVFxsiCAcxqDscz/01mJcuA83ACgmbfC
RhW2pZtzS0BNtWP4p9S1h6U =akIl
-----END PGP SIGNATURE-----

--NKoe5XOeduwbEQHU--

--
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
Le #19368171
Fanfan a écrit, mardi 19 mai 2009, à 13:25 :
Le Tuesday 19 May 2009 à 11:51:52 (+0200), Jacques L'helgoualc'h a écrit :
> > 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"
>
> sed -re 's/.{42,70}[[:blank:]]/&\n/g'

Tu fais ta césure avant le 70 eme caractère, ce qui ne correspond pas à
la condition 1.



Oui, je réponds un peu à côté : je suppose qu'on veut

- limiter à 70 caractères (ou 71, blanc compris (les cartes perforées, c'était 72
+ 8 colonnes de numérotage :)) ;

- en coupant de préférence sur les blancs...

Il me semblait que le quantificateur {} était avide et allait avaler
tous les caractères jusqu'à 70, même si on trouve un blanc entre 42 et
70. Me gourre-je ?



Un peu, il reculera au dernier blanc dans la fourchette :

~ $ echo 012345678901234567890123456789012345678942
0123456789012345678901234567890123456789 |
sed -re 's/.{42,70}[[:blank:]]/&\n/g'
012345678901234567890123456789012345678942
0123456789012345678901234567890123456789

> va avoir une certaine élasticité ; pour ne pas te casser la tête avec un
> unique script sed compliqué, tu peux piper dans un second rigide pour
> casser les lignes trop longues que laisse passer le premier :
> sed -re 's/.{42,70}[[:blank:]]/&\n/g' |
> sed -re 's/.{70}/&\n/g'

En fait, la, tu vas couper à 70, même au milieu d'un mot.



Comme dans la demande initiale.

Au final, toutes tes lignes feront moins de 71 caractères, avec une césure en
plein mot. Non ?



Oui, si besoin.
--
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
Gilles MISSONNIER
Le #19376841
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.

---1480404480-1745414460-1242839191=:11713
Content-Type: TEXT/PLAIN; CHARSET=UTF-8
Content-Transfer-Encoding: QUOTED-PRINTABLE
Content-ID:
bonjour,
et c'est quasi-vendredi :+)

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 sup primé)

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

--------------------------------------------------
François :
sed -e '1,$s/(^.{70}[^ ]*) /1n/g' fichier

Jacques : (et puis c'est quoi ce "" qui déboule dans le résultat ?)
sed -re 's/.{42,70}[[:blank:]]/&\n/g' fichier |
sed -re 's/.{70}/&\n/g'

Fanfan :
sed 's/(.{70,70}[^ ]*) (.+)$/1n2/' fichier

hé bé ça le fait pô.


_-¯-_-¯-_-¯-_-¯-_
Gilles Missonnier
IAP -
01 44 32 81 36
---1480404480-1745414460-1242839191=:11713--

--
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
Le #19377671
Gilles MISSONNIER a écrit, mercredi 20 mai 2009, à 19:22 :
bonjour,
et c'est quasi-vendredi :+)



:)

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é)



En fait, ça me paraît un peu bancal : je vois plutôt un maximal strict,
et une préférence pour les blancs en raccourcissant un peu...

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



Bon, si tu veux équilibrer, le plus simple est de faire un peu
d'arithmétique, donc Sed n'est peut-être pas le plus indiqué.


François :
sed -e '1,$s/(^.{70}[^ ]*) /1n/g' fichier

Jacques : (et puis c'est quoi ce "" qui déboule dans le résultat ?)



C'était la demande initiale, le caractère de continuation à insérer.

sed -re 's/.{42,70}[[:blank:]]/&\n/g' fichier |
sed -re 's/.{70}/&\n/g'

Fanfan :
sed 's/(.{70,70}[^ ]*) (.+)$/1n2/' fichier

hé bé ça le fait pô.



--
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
Le #19378761
--H1spWtNR+x+ondvy
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

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 zerkze r 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.

Fanfan

--
Pour se marier, il faut un témoin, comme pour un accident ou un duel.
[ Sacha Guitry ]

--H1spWtNR+x+ondvy
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iD8DBQFKFIiwn0FdfiSfsswRAnU9AJsFykpppSzGE13qPMmVdSsAu90w8gCgrVfi
1NAwjOXc0twan55Apkr/Xqs =O+wo
-----END PGP SIGNATURE-----

--H1spWtNR+x+ondvy--

--
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
Publicité
Poster une réponse
Anonyme