Re: Re : Re: sed ignorer une occurence

2023-06-05 Par sujet Marc Chantreux
salut,

> J'utilise plutôt emacs et ne connais pas bien vi autrement que pour
> éditer des fichiers de config.

/!\: message à caractère informatif sans volonté prosélyte

une des raisons qui me font aimer vim est justement la simplicité avec
laquelle tu peux interagir avec les autres commandes. j'ai fais toute
une conférence là dessus (c'est en euuuhh-anglais)

https://github.com/eiro/talk-acme-changed-my-life

je fais des demos qui illustrent ce que je te proposais de faire.

> Il me manquais deux notions :
> [^.\n] non match (la négation de la correspondance
> \1 backreference dans l'expression régulière, là par contre il va
> falloir que je lise une bonne doc sur le sujet, G pas tout compris !

ah ben sans rentrer dans les détails (attention: le -r est important)

soit une liste de tu veux transformer. disons la liste suivante:

Manipulation - Au commencement, le troisième homme - Ep 1⧸6 - Documentaire sur 
l'affaire Clearstream [vzKpalcKfF4].webm
Manipulation - Clearstream, la banque des banques - Ep 2⧸6 - Documentaire sur 
l'affaire Clearstream [RaDFbeO94Rg].webm
Manipulation - Jean-Luc Lagardère, le scénario noir - Ep 3⧸6 - l'affaire 
Clearstream - Y [a7glzdg_1ng].webm
Manipulation - Karachi et le trésor de guerre - Ep 5⧸6 - l'affaire Clearstream 
- Y [SePDLJt85bw].webm
Manipulation - La république des mallettes - Ep 6⧸6 - l'affaire Clearstream - Y 
[QrdpPCZfA1w].webm
Manipulation - Taïwan, naissance de la zone grise - Ep 4⧸6 - l'affaire 
Clearstream - Y [qYzEW7rZkn0].webm

en la liste suivante

1_Au_commencement_le_troisième_homme.webm
2_Clearstream_la_banque_des_banques.webm
3_Jean-Luc_Lagardère_le_scénario_noir.webm
5_Karachi_et_le_trésor_de_guerre.webm
6_La_république_des_mallettes.webm
4_Taïwan_naissance_de_la_zone_grise.webm

la première étape c'est de trouver la structure

Manipulation - (TITRE) - Ep 1⧸(NUMERO) - (RESTE)

que je veux transformer en

(NUMERO)_(TITRE).webm

* le titre arrive en premier (\1) et est composé de n'importe quoi (.*)
* le numéro arrive en second (\2) et est composé d'un numéro
* j'aurais pu écrire [0-9]
* je suis une flême: dans notre cas, '.' fait bien l'affaire
* tout le reste (.*), on s'en fout

j'ai donc le motif /^Manipulation - (.*) - Ep 1⧸(.) - .*/
que je veux transformer en \2_\1.webm

ensuite je repasse derrière pour virer les caractères étranges:

s/[ ,]+/_/g

donc si je fais

sed -r '
# afficher le nom actuel
p
# modifier la structure
s!^Manipulation - (.*) - Ep (.).*!\2_\1.webm!
# virer les caractères pourris
s/[ ,]+/_/g
' <<%
…

J'ai une nouvelle liste avec pour chaque épisode:
* nouveau nom
* ancien nom

si je demande à xargs de prendre ces noms 2 par 2 pour les filer
à mv, je fais du renommage de masse:

{ sed -r '
# afficher le nom actuel
p
# modifier la structure
s!^Manipulation - (.*) - Ep (.).*!\2_\1.webm!
# virer les caractères pourris
s/[ ,]+/_/g
' | xargs -d'\n' -n2 mv <<%
…

et tout ça quand tu le fais depuis vim c'est très interactif parceque
chaque étape est du texte que tu peux modifier.

elle est pas belle la vie ?

à nouveau: si je suis allé trop vite, hésite pas à demander :)

cordialement,
marc



Re: Re : Re: sed ignorer une occurence

2023-06-03 Par sujet Dethegeek
Bonjour,

J'ai fait un peu de révision sur les regex hier, justement.

Les backreferences servent à exprimer un occurrence de texte identique à
une autre occurence précédente, capturée par des parenthèses.

Par exemple, dans un texte contenant des chaînes délimitées soit par des
doubles quotes ou des simples quotes (le HTML apr exemple) alors tu peux
capturer le début d'une chaîne avec ("|') puis trouver la fin de cette
chaîne avec \1. En supposant que l'ouverture de la chaîne soit la 1ere
paire de parenthèses de ta regex.

Dans ton cas tu veux que ta regex ne corresponde PAS à un masque suivi d'un
point puis un retour à la ligne (de ce que j'ai compris). Ce point et
retour a la ligne le doivent pas être dans la chaîne matchée. Il te faut
donc un look around. Tu peux le faire avec (?!\.\n) .

Essaye et dis si ça fonctionne.

Tu as aussi des outils sympas pour tester tes regexes,


https://regex101.com/

Et une excellente documentation sur les regexes, celle qui m'a permis de
tout en apprendre il y a bien longtemps. Pour moi c'est une référence dans
le domaine.

https://www.regular-expressions.info/

Jette un oeil aux lookarounds, c'est abondament expliqué.





Le sam. 3 juin 2023 à 13:46, benoit  a écrit :

> Le vendredi 2 juin 2023 à 18:05, Marc Chantreux  a écrit :
>
>
> > salut,
> >
> > > % sed -rz '{s/-\n//g;s/\n//g}' format.txt
> >
> >
> > <<\% sed -rz 's/-\n//g; s/([^.\n])\n/\1/g' | tr -s ' ' | fmt -w72
> >
> > Je suis pas sur d'avoir compris le pb.
> >
> > Je voudrais reformater du texte en colonne,
> > qui a été just-
> > ifié avec des retours à la ligne (\n) et
> > est - de coupure de mot.
> >
> > %
> >
> > Si la commande correspond bien à ton besoin, tu peux directement
> > l'utiliser dans vi grace à un range.
> >
>
> J'utilise plutôt emacs et ne connais pas bien vi autrement que pour éditer
> des fichiers de config.
>
>
> > si tu as fais une selection visuelle, tappes
> >
> > !sed -rz 's/-\n//g; s/([^.\n])\n/\1/g' | tr -s ' ' | fmt -w72
> >
> > les prochains usages de ! rappellent le dernier filtre, tu n'auras
> > plus qu'a taper !! au lieu de ! et rappeler la commande.
> >
> > Évidement ça marche avec tous les ranges :)
> >
> > astuce: mettre le filtre dans un fichier à part pour en faciliter la
> > maintenance:
> >
> > :sp monfiltre
> > :!chmod a+x %
> >
> > et ensuite tu peux écrire ton filtre en espaçant un peu et en commentant
> >
> > #!/bin/sh
> > # note1: je ne vire le retour à la ligne que si il est précédé
> > # d'autre chose qu'un espace
>
> d'autre chose qu'un point "." tu veux dire ?
> Oui c'est bien ma demande virer tous les retour à la ligne et
> ignorer([^.\n]) ceux qui sont précédés d'un point.
>
> Il me manquais deux notions :
> [^.\n] non match (la négation de la correspondance)
> \1 backreference dans l'expression régulière, là par contre il va falloir
> que je lise une bonne doc sur le sujet, G pas tout compris ! :-)
>
> > sed -rz '
> > s/-\n//g
> > s/([^.\n])\n/\1/g # cf. note1
> > ' |
> > tr -s ' ' |
> > fmt -w72
> >
> > et finalement
> >
> > filtrer avec !./monfiltre
> >
> >
> > je fais concis pour aller vite. n'hésite pas à me demander de plus
> > amples explications si cette piste de plait.
> >
>
> Un tout grand merci, je vais d’abord me documenter sur les backreferences
> !
>
> Avec gratitude,
> Benoît
>
>


Re : Re: sed ignorer une occurence

2023-06-03 Par sujet benoit
Le vendredi 2 juin 2023 à 18:05, Marc Chantreux  a écrit :


> salut,
> 
> > % sed -rz '{s/-\n//g;s/\n//g}' format.txt
> 
> 
> <<\% sed -rz 's/-\n//g; s/([^.\n])\n/\1/g' | tr -s ' ' | fmt -w72
> 
> Je suis pas sur d'avoir compris le pb.
> 
> Je voudrais reformater du texte en colonne,
> qui a été just-
> ifié avec des retours à la ligne (\n) et
> est - de coupure de mot.
> 
> %
> 
> Si la commande correspond bien à ton besoin, tu peux directement
> l'utiliser dans vi grace à un range.
> 

J'utilise plutôt emacs et ne connais pas bien vi autrement que pour éditer des 
fichiers de config.


> si tu as fais une selection visuelle, tappes
> 
> !sed -rz 's/-\n//g; s/([^.\n])\n/\1/g' | tr -s ' ' | fmt -w72
> 
> les prochains usages de ! rappellent le dernier filtre, tu n'auras
> plus qu'a taper !! au lieu de ! et rappeler la commande.
> 
> Évidement ça marche avec tous les ranges :)
> 
> astuce: mettre le filtre dans un fichier à part pour en faciliter la
> maintenance:
> 
> :sp monfiltre
> :!chmod a+x %
> 
> et ensuite tu peux écrire ton filtre en espaçant un peu et en commentant
> 
> #!/bin/sh
> # note1: je ne vire le retour à la ligne que si il est précédé
> # d'autre chose qu'un espace

d'autre chose qu'un point "." tu veux dire ?
Oui c'est bien ma demande virer tous les retour à la ligne et ignorer([^.\n]) 
ceux qui sont précédés d'un point.

Il me manquais deux notions :
[^.\n] non match (la négation de la correspondance) 
\1 backreference dans l'expression régulière, là par contre il va falloir que 
je lise une bonne doc sur le sujet, G pas tout compris ! :-)

> sed -rz '
> s/-\n//g
> s/([^.\n])\n/\1/g # cf. note1
> ' |
> tr -s ' ' |
> fmt -w72
> 
> et finalement
> 
> filtrer avec !./monfiltre
> 
> 
> je fais concis pour aller vite. n'hésite pas à me demander de plus
> amples explications si cette piste de plait.
> 

Un tout grand merci, je vais d’abord me documenter sur les backreferences  !

Avec gratitude,
Benoît



Re: sed ignorer une occurence

2023-06-02 Par sujet Marc Chantreux
salut,

Le Thu, Jun 01, 2023 at 10:46:00AM +, benoit a écrit :
> Je voudrais reformater du texte en colonne, qui a été justifié avec des 
> retours
> à la  ligne (\n) et des "-" de coupure de mot
> ex:
> Je voudrais reformater du texte en colonne, qui a été just- «---
> ifié avec des retours à la  ligne (\n) et est - de coupure de
>  mot.
> 
> % sed -rz '{s/-\n//g;s/\n//g}' format.txt

<<\% sed -rz 's/-\n//g; s/([^.\n])\n/\1/g' | tr -s ' ' | fmt -w72

Je suis pas sur d'avoir compris le pb.

Je voudrais reformater du texte en colonne,
qui a étéjust-
ifié avec des retours à la ligne (\n)et
est - de coupure de mot.

%

Si la commande correspond bien à ton besoin, tu peux directement
l'utiliser dans vi grace à un range.

si tu as fais une selection visuelle, tappes

!sed -rz 's/-\n//g; s/([^.\n])\n/\1/g' | tr -s ' ' | fmt -w72

les prochains usages de ! rappellent le dernier filtre, tu n'auras
plus qu'a taper !! au lieu de ! et rappeler la commande.

Évidement ça marche avec tous les ranges :)

astuce: mettre le filtre dans un fichier à part pour en faciliter la
maintenance:

:sp monfiltre
:!chmod a+x %

et ensuite tu peux écrire ton filtre en espaçant un peu et en commentant

#!/bin/sh
# note1: je ne vire le retour à la ligne que si il est précédé
#d'autre chose qu'un espace
sed -rz '
s/-\n//g
s/([^.\n])\n/\1/g # cf. note1
' |
tr -s ' ' |
fmt -w72

et finalement

filtrer avec !./monfiltre

je fais concis pour aller vite. n'hésite pas à me demander de plus
amples explications si cette piste de plait.

cordialement,
marc



Re: sed ignorer une occurence

2023-06-01 Par sujet l0f4r0
Hello,

1 juin 2023, 12:46 de benoit...@protonmail.ch:

> % > sed -rz '{s/-\n//g;s/\n//g}' format.txt
>
> Mais je ne suis pas satisfait du résultat parce que je voudrais ignorer les 
> points (.\n) suivit d'un retour à la ligne.
>
sed ':a;N;$!ba;s/-\n//g' format.txt

l0f4r0



Re: sed ignorer une occurence

2023-06-01 Par sujet Michel Verdier
Le 1 juin 2023 benoit a écrit :

> A certains endroits ça mets deux espaces, je vais chercher pourquoi...
> Mais en attendant de comprendre, je retourne au début et repasse une fois 
> pour les virer et c'est bon ! ;-)

tu dois avoir des espaces en fin de ligne qui trainent, donc peut-être,
pour ne pas supprimer des double espaces qui seraient valides :

(defun ConvertRet ()
  "Convertit un retour à la ligne."
  (interactive)
  (let (
(p1 (region-beginning))
(p2 (region-end)))
(save-restriction
  (narrow-to-region p1 p2)
  (goto-char (point-min))
  (while (re-search-forward "-\\\n" nil t)
(replace-match "" nil t))
  (goto-char (point-min))
  (while (re-search-forward " \\\n" nil t)
(replace-match " " nil t))
  (goto-char (point-min))
  (while (re-search-forward "\\([^.]\\)\\\n" nil t)
(replace-match (concat (match-string 1) " ") nil t))
  )))

(defun indentBuffer ()
  "Convertit un texte jutifié avec des retours à la ligne."
  (interactive)
  (mark-whole-buffer)
  (ConvertRet))



Re : Re: sed ignorer une occurence

2023-06-01 Par sujet benoit
Le jeudi 1 juin 2023 à 20:54, Michel Verdier  a écrit :

> 
> Autant pour moi, faut toujours regarder les Messages :)
> Là ça devrait marcher pour de vrai.
> 
> (defun ConvertRet ()
> "Convertit un retour à la ligne."
> (interactive)
> (let (
> (p1 (region-beginning))
> (p2 (region-end)))
> (save-restriction
> (narrow-to-region p1 p2)
> (goto-char (point-min))
> (while (re-search-forward "-\\\n" nil t)
> (replace-match "" nil t))
> (goto-char (point-min))
> (while (re-search-forward "\\([^.]\\)\\\n" nil t)
> (replace-match (concat (match-string 1) " ") nil t))
> )))
> 


Un tout grand merci... :-)


A certains endroits ça mets deux espaces, je vais chercher pourquoi...
Mais en attendant de comprendre, je retourne au début et repasse une fois pour 
les virer et c'est bon ! ;-)


(defun ConvertRet ()
  "Convertit les retours à la ligne."
  (interactive)
  (let (
(p1 (region-beginning))
(p2 (region-end)))
(save-restriction
  (narrow-to-region p1 p2)
  (goto-char (point-min))
  (while (re-search-forward "-\\\n" nil t)
(replace-match "" nil t))
  (goto-char (point-min))
  (while (re-search-forward "\\([^.]\\)\\\n" nil t)
(replace-match (concat (match-string 1) " ") nil t))
  (goto-char (point-min))
  (while (re-search-forward "  " nil t)
(replace-match " " nil t))
  
  )))


Avec gratitude,

--
Benoît



Re: sed ignorer une occurence

2023-06-01 Par sujet Michel Verdier
Le 1 juin 2023 benoit a écrit :

> Ne fonctionne pas chez moi

Autant pour moi, faut toujours regarder les Messages :)
Là ça devrait marcher pour de vrai.

(defun ConvertRet ()
  "Convertit un retour à la ligne."
  (interactive)
  (let (
(p1 (region-beginning))
(p2 (region-end)))
(save-restriction
  (narrow-to-region p1 p2)
  (goto-char (point-min))
  (while (re-search-forward "-\\\n" nil t)
(replace-match "" nil t))
  (goto-char (point-min))
  (while (re-search-forward "\\([^.]\\)\\\n" nil t)
(replace-match (concat (match-string 1) " ") nil t))
  )))

(defun indentBuffer ()
  "Convertit un texte jutifié avec des retours à la ligne."
  (interactive)
  (mark-whole-buffer)
  (ConvertRet))



Re : Re: sed ignorer une occurence

2023-06-01 Par sujet benoit


Le jeudi 1 juin 2023 à 16:01, Michel Verdier  a écrit :


> Le 1 juin 2023 benoit a écrit :
> 
> > Il me reste juste l'exception pour le cas ou je veux laisser les "\n" des 
> > lignes qui se terminent par un "." ?
> 
> 
> Ah oui j'avais zappé ça. Voilà mon texte de test :
> 
> Je voudrais reformater du texte en colonne, qui a été just-
> ifié avec des retours à la ligne (\n) et est - de coupure de
> mot.
> Mais pas ce dernier.
> 
> Et l'ajout de la ligne qui va bien :
> 
> (defun ConvertRet ()
> "Convertit un retour à la ligne."
> (interactive)
> (let (
> (p1 (region-beginning))
> (p2 (region-end)))
> (save-restriction
> (narrow-to-region p1 p2)
> (goto-char (point-min))
> (while (re-search-forward "-\\\n" nil t)
> (replace-match "" nil t))
> (goto-char (point-min))
> (while (re-search-forward "\\\n" nil t)
> (cond (not match ".\\\n")
> (replace-match " " nil t)))
> )))
> 
> (defun indentBuffer ()
> "Convertit un texte jutifié avec des retours à la ligne."
> (interactive)
> (mark-whole-buffer)
> (ConvertRet))


(cond (not match ".\\\n") 
Ne fonctionne pas chez moi

Est ce que ".\\\n" ne veut pas dire n'importe que caractère (.) suivit de \n ?

Du coup j'ai essayé deux formes :
"\\.\\\n"
"[.]\\\n"

Mais il désélectionne la première ligne et rien ne se passe
J'ai joint un fichier formaté sur 72 caractères comme exemple

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mollis 
sagittis libero at semper. In lacinia in lorem sit amet semper. Nulla 
pellentesque venenatis dolor, et dapibus dolor feugiat ut. Aenean purus 
nunc, elementum vel lectus sed, blandit laoreet ipsum. Aenean in augue 
lobortis leo accumsan maximus. Maecenas ante est, ornare vel 
ullamcorper sodales, ultrices sit amet augue. Donec ut augue eget odio 
tempus condimentum sit amet eu tortor.

Aliquam tincidunt lacinia nulla eu pretium. Nunc eu velit velit. Mauris 
a volutpat odio, vitae molestie tellus. Proin fermentum tempus tempor. 
Maecenas pellentesque consequat quam, in fringilla lectus mollis nec. 
Ut tristique magna hendrerit, gravida metus id, dapibus dui. Proin sed 
consequat risus. Aenean eu placerat leo. Suspendisse pulvinar augue 
porttitor risus tempus tristique. Donec mauris nulla, suscipit non arcu 
non, ullamcorper feugiat dui. Vestibulum at orci cursus, elementum 
tellus ut, accumsan ipsum.

Nam luctus neque quis arcu posuere, vulputate volutpat magna efficitur. 
Maecenas ut leo quis est molestie faucibus. Nam commodo est ac elit 
molestie hendrerit. Aliquam ut aliquet mauris. Maecenas magna magna, 
volutpat cursus ligula vel, tristique laoreet ante. Maecenas malesuada 
ante fringilla, sagittis massa fringilla, rutrum ligula. Nullam gravida 
dolor ut dolor faucibus, ac posuere mauris lobortis. Fusce tempor 
sodales enim, et lobortis arcu mattis vehicula. Ut posuere tristique 
diam id lobortis. Integer porta neque sit amet erat aliquet consectetur 
sed quis mi. Maecenas ut maximus diam. Sed rhoncus lorem vel eros 
dictum, sit amet vehicula dui mollis. Mauris euismod felis hendrerit, 
tempus sapien quis, commodo eros. Vestibulum id auctor libero, non 
accumsan enim. Nulla facilisi. Mauris vel lacinia sem.

Aliquam nec molestie enim. Cras ac justo eros. Vestibulum ante ipsum 
primis in faucibus orci luctus et ultrices posuere cubilia curae; Fusce 
eget felis congue, vulputate est eget, bibendum sapien. Donec 
scelerisque erat vitae massa molestie sodales. Ut lorem quam, varius ac 
purus in, cursus pulvinar ante. Phasellus et mi sed elit molestie 
accumsan. Ut venenatis suscipit urna quis commodo. Aliquam suscipit 
aliquet magna, vitae condimentum ipsum aliquet in. Pellentesque 
condimentum est eu lorem elementum luctus. Nunc venenatis justo sit 
amet dui rutrum scelerisque. Duis ut pellentesque ante, ornare 
vulputate dui. Etiam congue sed ante sit amet euismod. Maecenas rutrum 
laoreet sapien ut tincidunt. Maecenas commodo eros sit amet posuere 
varius.

Re: sed ignorer une occurence

2023-06-01 Par sujet Michel Verdier
Le 1 juin 2023 benoit a écrit :

> Il me reste juste l'exception pour le cas ou je veux laisser les "\n" des 
> lignes qui se terminent par un "." ?

Ah oui j'avais zappé ça. Voilà mon texte de test :

Je voudrais reformater du texte en colonne, qui a été just-
ifié avec des retours à la ligne (\n) et est - de coupure de
mot.
Mais pas ce dernier.

Et l'ajout de la ligne qui va bien :

(defun ConvertRet ()
  "Convertit un retour à la ligne."
  (interactive)
  (let (
(p1 (region-beginning))
(p2 (region-end)))
(save-restriction
  (narrow-to-region p1 p2)
  (goto-char (point-min))
  (while (re-search-forward "-\\\n" nil t)
(replace-match "" nil t))
  (goto-char (point-min))
  (while (re-search-forward "\\\n" nil t)
(cond (not match ".\\\n")
  (replace-match " " nil t)))
  )))

(defun indentBuffer ()
  "Convertit un texte jutifié avec des retours à la ligne."
  (interactive)
  (mark-whole-buffer)
  (ConvertRet))



Re : Re: sed ignorer une occurence

2023-06-01 Par sujet benoit
Le jeudi 1 juin 2023 à 15:21, Michel Verdier  a écrit :

> Tu y étais presque :)
> 
> (defun ConvertRet ()
> "Convertit un retour à la ligne."
> (interactive)
> (let (
> (p1 (region-beginning))
> (p2 (region-end)))
> (save-restriction
> (narrow-to-region p1 p2)
> (goto-char (point-min))
> (while (re-search-forward "-\\\n" nil t)
> (replace-match "" nil t))
> (goto-char (point-min))
> 
> (while (re-search-forward "\\\n" nil t)
> (replace-match " " nil t))
> )))
> 
> (defun indentBuffer ()
> "Convertit un texte jutifié avec des retours à la ligne."
> (interactive)
> (mark-whole-buffer)
> (ConvertRet))

Un tout grand merci ! :-)
Il me reste juste l'exception pour le cas ou je veux laisser les "\n" des 
lignes qui se terminent par un "." ?

C'est sur ce site que je me suis initié à faire mes macros pour emacs, du coup 
un petit UP dans les moteurs de recherche !
http://xahlee.info/emacs/emacs
 



Re: sed ignorer une occurence

2023-06-01 Par sujet Michel Verdier
Le 1 juin 2023 benoit a écrit :

> Je m'y suis essayé, j'ai abandonné, mais avec un petit coupe de pouce... ;-)

Tu y étais presque :)

(defun ConvertRet ()
  "Convertit un retour à la ligne."
  (interactive)
  (let (
(p1 (region-beginning))
(p2 (region-end)))
(save-restriction
  (narrow-to-region p1 p2)
  (goto-char (point-min))
  (while (re-search-forward "-\\\n" nil t)
(replace-match "" nil t))
  (goto-char (point-min))

  (while (re-search-forward "\\\n" nil t)
(replace-match " " nil t))
  )))

(defun indentBuffer ()
  "Convertit un texte jutifié avec des retours à la ligne."
  (interactive)
  (mark-whole-buffer)
  (ConvertRet))



Re : Re: sed ignorer une occurence

2023-06-01 Par sujet benoit
Bonjour,

Le jeudi 1 juin 2023 à 12:56, Basile Starynkevitch  a 
écrit :

> Une possibilité est l'utilisation de l'utilitaire 
> https://man7.org/linux/man-pages/man1/fmt.1.html

A je ne connais pas je vais aller voir

> Une autre possibilité est de le faire sous GNU emacs 
> https://www.gnu.org/software/emacs/
>
> (ave un peu d'huile de coude, c'est automatisable)

Je m'y suis essayé, j'ai abandonné, mais avec un petit coupe de pouce... ;-)

(defun ConvertRet ()
"Convertis un retour à la ligne"
(interactive)
(let (
(p1 (region-beginning))
(p2 (region-end)))
(save-restriction
(narrow-to-region p1 p2)
(goto-char (point-min))
(while (re-search-forward "-\n" nil t)
(replace-match "" nil t))
(goto-char (point-min))

(while (re-search-forward "\n" nil t)
(replace-match " " nil t))
)))

(defun indentBuffer ()
"Converti un text jutifié avec des retours à la lign."
(interactive)
(mark-whole-buffer)
(ConvertRet (region-beginning) (region-end)))

Re: sed ignorer une occurence

2023-06-01 Par sujet Basile Starynkevitch


On 6/1/23 12:46, benoit wrote:

Bonjour


Je voudrais reformater du texte en colonne, qui a été justifié avec 
des retours à la  ligne (\n) et des "-" de coupure de mot

ex:
Je voudrais reformater du texte en colonne, qui a été just- «---
ifié avec des retours à la  ligne (\n) et est - de coupure de
 mot.

% sed -rz '{s/-\n//g;s/\n//g}' format.txt

Mais je ne suis pas satisfait du résultat parce que je voudrais 
ignorer les points (.\n) suivit d'un retour à la ligne.


Merci d'avance




Une possibilité est l'utilisation de l'utilitaire 
https://man7.org/linux/man-pages/man1/fmt.1.html



Une autre possibilité est de le faire sous GNU emacs 
https://www.gnu.org/software/emacs/


(ave un peu d'huile de coude, c'est automatisable)


Une autre possibilité est de coder avec GNU bison et/ou GNU flex.

La difficulté est de définir ce qu'est un mot (on peut imaginer un texte 
encodé en UTF-8 avec un mélange de mots en hébreu -ou chinois ou serbe 
ou arabe ou simplement en anglais- et en français, et alors le problème 
est bien plus difficile).



Il faut formaliser ce qu'est le texte d'entrée, et le jeu de caractères 
utilisé (UTF-8) et le language humain utilisé.



Même pour du texte en français (ou en anglais), les règles de césure 
sont complexes, je ne ne les connais pas toutes (la consultation d'une 
grammaire ou d'un manuel typographique s'impose). Par exemple, je crois 
me souvenir qu'un nombre (en français) comme 2 145 906 (la population de 
Paris en 2020) ne doit pas être césuré!



Les logiciels de typographie libres (par exemple https://latex.org/ ou 
Lout en https://ftp.gnu.org/gnu/lout.README ...) sont compliqué pour 
gérer la césure correctement!


Librement


--
Basile Starynkevitch
(only mine opinions / les opinions sont miennes uniquement)
92340 Bourg-la-Reine, France
web page: starynkevitch.net/Basile/


Re: sed : suppression de lignes

2022-09-12 Par sujet Marc Chantreux
salut,

> J’aurais donc donné cette commande :
> sed -i '/^49\.7\.20\./d'  fichier.txt

perso je metacaractère entre crochets parceque je trouve ca plus facile
* de le visualiser apres coup
* de l'étendre (le [.] qui devient [ :] avec le temps)
* de l'embarquer dans un autre script en réduisant le quoting hell

sed -i '/^49[.]7[.]20[.]/d'  fichier.txt

> Il est préférable d’ajouter également le « . » à la fin pour éviter de
> supprimer par exemple une ligne « 49.7.201 » qu’on souhaiterai
> conserver par exemple…

et si jamais tu veux trouver '49.' autre part qu'au début de ta ligne,
un début de mot (\<) t'évitera d'embraquer 149. attention, il te faut
l'utiliser avec -r ou -E (je préfère noter -r par experience d'autres
impleméntations de sed).

<<. sed -r '/\<49[.]/d'
149.
# 49.
.49.
route49.
# 149.
49.

donne:

149.
route49.
# 149.

-- 
Marc Chantreux
Pôle de Calcul et Services Avancés à la Recherche (CESAR)
http://annuaire.unistra.fr/p/20200



Re: sed : suppression de lignes

2022-09-12 Par sujet Pierre Malard
Salut,

Histoire d’en rajouter une couche, la suggestion d’échapper les points était LA 
bonne solution car le point est interprété comme un caractère … quelconque ce 
qui peut être assez gênant non ?

J’aurais donc donné cette commande :
$ sed -i '/^49\.7\.20\./d'  fichier.txt
sans le « -i » pour faire un test d’abord.

PS :
Il est préférable d’ajouter également le « . » à la fin pour éviter de 
supprimer par exemple une ligne « 49.7.201 » qu’on souhaiterai conserver par 
exemple…

A+

> Le 12 sept. 2022 à 12:41, antoine.valmer  a écrit :
> 
>> Le 9/09/22 à 19:22, antoine.valmer a écrit :
>>> Bonjour à tous,
>>> Dans un fichier texte, j'ai ce type de lignes :
>>> 49.7.20.111|17August2022
>>> 49.7.20.120|18August2022
>>> Je souhaite supprimer toutes celles qui ont cette expression :
>>> "49.7.20."
>>> J'ai tenté cette commande :
>>> sed '/49.7.20/d'
>>> mais elle n'efface aucune ligne contenant "49.7.20."
> 
> Hello,
> Grand merci à tous ceux qui m'ont répondu,
> voici la commande que j'ai tapée :
> sed -i '/49.7.20/d' fichier.txt
> qui a bien marché.
> Je retiens aussi les autres commandes qui m'ont été indiquées.
> Bonne journée.
> 
>> On Saturday 10 September 2022 11:06:15 Jean-Marc et d'autres wrote:
>> sed -i '/^49\.7\.20/d' nom-de-ton-fichier
> 

--
Pierre Malard
Responsable architectures système CDS DINAMIS/THEIA Montpellier
IRD - UMR Espace-Dev - UAR CPST - IR Data-Terra
Maison de la Télédétection
500 rue Jean-François Breton
34093 Montpellier Cx 5
France

   « Le socialisme vrai ne veut pas renverser l'ordre des classes ;
   il veut fondre les classes dans une organisation du travail qui
   sera meilleure pour tous »
Jean Jaures - "Les misères du patronat" - 1890
_,'| _.-''``-...___..--';)
   /_ \'.  __..-' ,  ,--...--'''
  <\.`--'''   ` /'
   `-';'   ;   ; ;
 __...--'' ___...--_..'  .;.'
(,__'''   (,..--''πr

perl -e '$_=q#: 3|\ 5_,3-3,2_: 3/,`.'"'"'`'"'"' 5-.  ;-;;,_:  |,A-  ) )-,_. ,\ 
(  `'"'"'-'"'"': '"'"'-3'"'"'2(_/--'"'"'  `-'"'"'\_): 
24πr::#;y#:#\n#;s#(\D)(\d+)#$1x$2#ge;print'
- --> Ce message n’engage que son auteur <--



signature.asc
Description: Message signed with OpenPGP


Re: sed : suppression de lignes

2022-09-12 Par sujet antoine.valmer
> Le 9/09/22 à 19:22, antoine.valmer a écrit :
> > Bonjour à tous,
> > Dans un fichier texte, j'ai ce type de lignes :
> > 49.7.20.111|17August2022
> > 49.7.20.120|18August2022
> > Je souhaite supprimer toutes celles qui ont cette expression :
> > "49.7.20."
> > J'ai tenté cette commande :
> > sed '/49.7.20/d'
> > mais elle n'efface aucune ligne contenant "49.7.20."

Hello,
Grand merci à tous ceux qui m'ont répondu,
voici la commande que j'ai tapée :
sed -i '/49.7.20/d' fichier.txt
qui a bien marché.
Je retiens aussi les autres commandes qui m'ont été indiquées.
Bonne journée.

> On Saturday 10 September 2022 11:06:15 Jean-Marc et d'autres wrote:
> sed -i '/^49\.7\.20/d' nom-de-ton-fichier



Re: sed : suppression de lignes

2022-09-10 Par sujet Jean-Marc

Le 9/09/22 à 19:22, antoine.valmer a écrit :

Bonjour à tous,
Dans un fichier texte, j'ai ce type de lignes :
49.7.20.111|17August2022
49.7.20.120|18August2022

Je souhaite supprimer toutes celles qui ont cette expression :
"49.7.20."
J'ai tenté cette commande :
sed '/49.7.20/d'
mais elle n'efface aucune ligne contenant "49.7.20."


sed -i '/^49\.7\.20/d' nom-de-ton-fichier




@+ et merci.


de rien.

A. Valmer


--
Jean-Marc


OpenPGP_signature
Description: OpenPGP digital signature


Re: sed : suppression de lignes

2022-09-09 Par sujet Marc Chantreux
On Fri, Sep 09, 2022 at 09:41:14PM +0200, Pierre ESTREM wrote:
> Attention à ne pas avoir inséré un caractère spécial à la place d'un espace.
> Ca m'est arrivé (comme à d'autres).

la bonne astuce pour verifier: tapper fc

la commande s'ouvre alors dans editor et si c'est vim. perso j'ai

set listchars=tab:  │,trail:▧,nbsp:▧

et dans 99% je découvre que j'ai introduit un espace npsp pret d'un pipe
(alt-space alt-6 au lieu de space alt-6).

-- 
Marc Chantreux
Pôle de Calcul et Services Avancés à la Recherche (CESAR)
http://annuaire.unistra.fr/p/20200



Re: sed : suppression de lignes

2022-09-09 Par sujet Marc Chantreux
salut,

> sed '/49.7.20/d'

je te confirme que le script est bon ... meme trop puisque 4937420 va
aussi matcher.

pour bien faire il te faudrait

sed '/49[.]7[.]20/d'

mais le plus rapide (à l'écriture et à l'excution) est de chercher une
chaine litterale puisque c'est ton cas:

grep -vF 49.7.20

il faut évidement que tu donnes un nom de fichier ou que stdin puisse
consommer qqchose.

> mais elle n'efface aucune ligne contenant "49.7.20."

comme ton problème n'est pas dans ton sedscript, tu pourrais nous donner
un exemple plus complet (entrée, commande complète, sortie)?

par exemple chez moi

<<. cat > oops
49.7.20.111|17August2022
49.7.20.120|18August2022
11.2.33.123|19August2022
.

for cmd desc (
9/sed '9base sed'
t/sed 'toybox sed'
b/sed 'busybox sed'
sed   'coreutils sed'
) {
print avec $desc
$cmd '/49.7.20/d' oops
echo
}

me donne bien

avec 9base sed
11.2.33.123|19August2022

avec toybox sed
11.2.33.123|19August2022

avec busybox sed
11.2.33.123|19August2022

avec coreutils sed
11.2.33.123|19August2022

-- 
Marc Chantreux
Pôle de Calcul et Services Avancés à la Recherche (CESAR)
http://annuaire.unistra.fr/p/20200



Re: sed : suppression de lignes

2022-09-09 Par sujet Pierre ESTREM

Bonsoir,

Attention à ne pas avoir inséré un caractère spécial à la place d'un espace.
Ca m'est arrivé (comme à d'autres).

pierre estrem


Le 09/09/2022 à 19:22, antoine.valmer a écrit :

Bonjour à tous,
Dans un fichier texte, j'ai ce type de lignes :
49.7.20.111|17August2022
49.7.20.120|18August2022

Je souhaite supprimer toutes celles qui ont cette expression :
"49.7.20."
J'ai tenté cette commande :
sed '/49.7.20/d'
mais elle n'efface aucune ligne contenant "49.7.20."
@+ et merci.
A. Valmer





Re: sed : suppression de lignes

2022-09-09 Par sujet Étienne Mollier
Bonjour,

antoine.valmer, on 2022-09-09:
> Dans un fichier texte, j'ai ce type de lignes :
> 49.7.20.111|17August2022
> 49.7.20.120|18August2022
> 
> Je souhaite supprimer toutes celles qui ont cette expression :
> "49.7.20."
> J'ai tenté cette commande :
> sed '/49.7.20/d' 
> mais elle n'efface aucune ligne contenant "49.7.20."

Bizarre, chez moi ça marche :

$ echo '49.7.20.111|17August2022' | sed '/49.7.20/d'
$ echo '49.7.20.120|18August2022' | sed '/49.7.20/d'
$ echo '11.2.33.123|19August2022' | sed '/49.7.20/d'
11.2.33.123|19August2022

Peut-être qu'il y a une subtilité entre différentes versions de
sed utilisées ?  Mais j'ai essayé avec GNU sed et busybox sed
sans avoir de problèmes :

$ sed --version
sed (GNU sed) 4.8
Packaged by Debian
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
.
[…]

$ busybox sed --version
This is not GNU sed version 4.0

Bonne soirée,
-- 
Étienne Mollier 
Fingerprint:  8f91 b227 c7d6 f2b1 948c  8236 793c f67e 8f0d 11da
Sent from /dev/tty1, please excuse my verbosity.


signature.asc
Description: PGP signature


Re: sed : suppression de lignes

2022-09-09 Par sujet Jérémy Prego

Oupss, j'ai oublier le /d de la fin de la commande ... désolé

sed '/49\.7\.20/d' /tmp/file.txt

Jerem
Le 09/09/2022 à 19:47, Jérémy Prego a écrit :

Bonjour,

et en échappant les "." ?

genre:
sed '/49\.7\.20/' /tmp/file.txt

Jerem
Le 09/09/2022 à 19:22, antoine.valmer a écrit :

Bonjour à tous,
Dans un fichier texte, j'ai ce type de lignes :
49.7.20.111|17August2022
49.7.20.120|18August2022

Je souhaite supprimer toutes celles qui ont cette expression :
"49.7.20."
J'ai tenté cette commande :
sed '/49.7.20/d'
mais elle n'efface aucune ligne contenant "49.7.20."
@+ et merci.
A. Valmer







Re: sed : suppression de lignes

2022-09-09 Par sujet Jérémy Prego

Bonjour,

et en échappant les "." ?

genre:
sed '/49\.7\.20/' /tmp/file.txt

Jerem
Le 09/09/2022 à 19:22, antoine.valmer a écrit :

Bonjour à tous,
Dans un fichier texte, j'ai ce type de lignes :
49.7.20.111|17August2022
49.7.20.120|18August2022

Je souhaite supprimer toutes celles qui ont cette expression :
"49.7.20."
J'ai tenté cette commande :
sed '/49.7.20/d'
mais elle n'efface aucune ligne contenant "49.7.20."
@+ et merci.
A. Valmer





Re: sed : suppression de lignes

2022-09-09 Par sujet Basile Starynkevitch


On 09/09/2022 19:22, antoine.valmer wrote:

Bonjour à tous,
Dans un fichier texte, j'ai ce type de lignes :
49.7.20.111|17August2022
49.7.20.120|18August2022

Je souhaite supprimer toutes celles qui ont cette expression :
"49.7.20."
J'ai tenté cette commande :
sed '/49.7.20/d'
mais elle n'efface aucune ligne contenant "49.7.20."
@+ et merci.
A. Valmer



Je suggère de lire avec attention la difficile documentation de sed, par 
exemple (en anglais) https://man7.org/linux/man-pages/man1/sed.1.html 
puis d'essayer peut-être


sed '1,$/49.7.20/d'


Bien sûr, *essayez cette commande sur des données _fictives_* d'abord.


Et je cherche des partenaires intéressés par RefPerSys en 
http://refpersys.org/


Librement

--
Basile Starynkevitch
(only mine opinions / les opinions sont miennes uniquement)
92340 Bourg-la-Reine, France
web page: starynkevitch.net/Basile/


Re: sed remplacer les "[ ]" d'une chaine

2020-12-14 Par sujet fabricer

ah merci bien !

j'ai plusieurs fois été attrapé mais sans jamais chercher réellement *honte*

a+

f.

Le 14/12/2020 à 17:29, Gaëtan PERRIER a écrit :

Le lundi 14 décembre 2020 à 16:40 +0100, Jean-Marc a écrit :

Et de la même man page :
special characters, including '\', lose  their  special  significance
within a bracket expression.

En clair, le caractère '\' perd sa signification spéciale entre '[]'.


Ce qui fonctionne :
$ l'exemple de Bernard,

. plusieurs substitutions dans un seul sed :
$ echo "--[chaine]-" | sed 's/\[/-/g; s/\]/-/g'

---chaine--


. un sed "étendu" :
$ echo "--[chaine]-" | sed -E 's/(\]|\[)/-/g'

---chaine--





Et bien on se couchera moins bête ce soir !!! :)

Gaëtan






Re: sed remplacer les "[ ]" d'une chaine

2020-12-14 Par sujet Gaëtan PERRIER
Le lundi 14 décembre 2020 à 16:40 +0100, Jean-Marc a écrit :
> Et de la même man page :
> special characters, including '\', lose  their  special  significance
> within a bracket expression.
> 
> En clair, le caractère '\' perd sa signification spéciale entre '[]'.
> 
> 
> Ce qui fonctionne :
> $ l'exemple de Bernard,
> 
> . plusieurs substitutions dans un seul sed :
> $ echo "--[chaine]-" | sed 's/\[/-/g; s/\]/-/g'
> 
> ---chaine--
> 
> 
> . un sed "étendu" :
> $ echo "--[chaine]-" | sed -E 's/(\]|\[)/-/g'
> 
> ---chaine--
> 
> 
> 

Et bien on se couchera moins bête ce soir !!! :)

Gaëtan


signature.asc
Description: This is a digitally signed message part


[Résolu] Re: sed remplacer les "[ ]" d'une chaine

2020-12-14 Par sujet benoit
‐‐‐ Original Message ‐‐‐
Le lundi 14 décembre 2020 16:11, Bernard Isambert  a écrit :

> man 7 regex :
> Pour insérer un « ] » littéral dans la liste, il faut le mettre en
> première position (ou après un éventuel « ^ »).
>
> echo "--[chaine]-" | sed 's/[][]/-/g'
> ---chaine--
>

Un tout grand merci !

--
Benoit



Re: sed remplacer les "[ ]" d'une chaine

2020-12-14 Par sujet Jean-Marc
Et de la même man page :
special characters, including '\', lose  their  special  significance
within a bracket expression.

En clair, le caractère '\' perd sa signification spéciale entre '[]'.


Ce qui fonctionne :
$ l'exemple de Bernard,

. plusieurs substitutions dans un seul sed :
$ echo "--[chaine]-" | sed 's/\[/-/g; s/\]/-/g'

---chaine--


. un sed "étendu" :
$ echo "--[chaine]-" | sed -E 's/(\]|\[)/-/g'

---chaine--



-- 

Jean-Marc

Le 14/12/20 à 16:11, Bernard Isambert a écrit :
> man 7 regex :
> Pour insérer un « ] » littéral dans la liste, il faut le mettre en
> première position (ou après un éventuel « ^ »).
> 
> echo "--[chaine]-" | sed 's/[][]/-/g'
> ---chaine--
> 
> 
> Le 14/12/2020 à 14:51, benoit a écrit :
>> Bonjour à toutes et tous,
>> Je voudrais remplacer les caractères "[" et "]" avec sed, mais ils
>> fonts partie du «regroupement» de caractère à sélectionner. Je les ai
>> précédé d'un "\" ainsi :
>> sed 's/[\[\]]/-/g'
>> Mais ça ne marche pas...
>>
>> echo "--[chaine]-" | sed 's/[\[\]]/-/g'
>>  --[chaine]-
>>
>> Par contre ceci fonctionne :
>> echo "--[chaine]--" | sed 's/\[/-/g' | sed 's/\]/-/g'
>> ---chaine--
>> Même si ça marche, j'ai envie de comprendre...
>>
>> Merci d'avance
>>
>> -- 
>> Benoit
>>
>>
>> Sent with ProtonMail  Secure Email.
>>
> 



OpenPGP_signature
Description: OpenPGP digital signature


Re: sed remplacer les "[ ]" d'une chaine

2020-12-14 Par sujet Bernard Isambert

man 7 regex :
Pour insérer un « ] » littéral dans la liste, il faut le mettre en 
première position (ou après un éventuel « ^ »).


echo "--[chaine]-" | sed 's/[][]/-/g'
---chaine--


Le 14/12/2020 à 14:51, benoit a écrit :

Bonjour à toutes et tous,
Je voudrais remplacer les caractères "[" et "]" avec sed, mais ils 
fonts partie du «regroupement» de caractère à sélectionner. Je les ai 
précédé d'un "\" ainsi :

sed 's/[\[\]]/-/g'
Mais ça ne marche pas...

echo "--[chaine]-" | sed 's/[\[\]]/-/g'
 --[chaine]-

Par contre ceci fonctionne :
echo "--[chaine]--" | sed 's/\[/-/g' | sed 's/\]/-/g'
---chaine--
Même si ça marche, j'ai envie de comprendre...

Merci d'avance

--
Benoit


Sent with ProtonMail  Secure Email.



--
Bernard.
25 ans d'utilisation de Debian. Comme le temps passe...




Re: sed et travail sur un bloc contenant un motif

2017-10-11 Par sujet Migrec

Le 10/10/2017 à 08:57, Dominique Dumont a écrit :

On Monday, 9 October 2017 22:11:31 CEST Alexandre Hoïde wrote:

  sed, peut-être… perso je ne vois pas, mais peut-être. Par contre, gawk ?

Pas d'idée pour sed non plus.

L'exemple avec awk m'a fait penser à une option peu connue de perl qui permet
de séparer un fichier en paragraphes ( -000) . Ce qui donne avec l'exemple de
fichier ldif donné par Alexandre:

$ perl -n -000 -e 'print if /sAMAccountName: smith/;' fichier.ldif
dn: CN=John Smith,OU=Users,DC=contoso,DC=com
proxyAddresses: SMTP:sm...@contoso.com
proxyAddresses: smtp:john.sm...@contoso.com
proxyAddresses: smtp:jsm...@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH
sAMAccountName: smith

dn: CN=John Smith,OU=Users,DC=contoso,DC=com
proxyAddresses: SMTP:sm...@contoso.com
proxyAddresses: smtp:john.sm...@contoso.com
proxyAddresses: smtp:jsm...@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH
sAMAccountName: smith


Merci, je vais tester ça pour voir si ça va bien mais ça semble pas mal. J'ai 
un fichier texte de 150Mo à parser donc je choisirai l'option la plus rapide !

J'ai eu ceci également ($1 motif, $2 fichier ldif à parser:

#!/bin/bash

# Recherche d'un uid
sed -n "/^dn: uid=/{:a;N;/\n$/!ba;/$1/p}" $2



Re: sed et travail sur un bloc contenant un motif

2017-10-09 Par sujet Dominique Dumont
On Monday, 9 October 2017 22:11:31 CEST Alexandre Hoïde wrote:
>  sed, peut-être… perso je ne vois pas, mais peut-être. Par contre, gawk ?

Pas d'idée pour sed non plus.

L'exemple avec awk m'a fait penser à une option peu connue de perl qui permet 
de séparer un fichier en paragraphes ( -000) . Ce qui donne avec l'exemple de 
fichier ldif donné par Alexandre:

$ perl -n -000 -e 'print if /sAMAccountName: smith/;' fichier.ldif 
dn: CN=John Smith,OU=Users,DC=contoso,DC=com
proxyAddresses: SMTP:sm...@contoso.com
proxyAddresses: smtp:john.sm...@contoso.com
proxyAddresses: smtp:jsm...@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH
sAMAccountName: smith

dn: CN=John Smith,OU=Users,DC=contoso,DC=com
proxyAddresses: SMTP:sm...@contoso.com
proxyAddresses: smtp:john.sm...@contoso.com
proxyAddresses: smtp:jsm...@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH
sAMAccountName: smith

HTH

-- 
 https://github.com/dod38fr/   -o- http://search.cpan.org/~ddumont/
http://ddumont.wordpress.com/  -o-   irc: dod at irc.debian.org



Re: sed et travail sur un bloc contenant un motif

2017-10-09 Par sujet Alexandre Hoïde
On Sun, Oct 08, 2017 at 01:47:15PM +0200, Migrec wrote:
>Bonjour,
> 
>J'ai un petit soucis de script et je pensais utiliser sed pour le régler
>mais mes connaissances sont rudimentaires... Est-ce possible d'afficher le
>bloc compris entre MOTIFDEBUT et MOTIFFIN et qui contient MOTIF sur l'une
>des lignes ?
> 
>Je veux en gros afficher une entrée d'un fichier LDIF pour une personne en
>particulier. Donc les lignes avant et les lignes après jusqu'à la nouvelle
>ligne suivante.
> 
>J'ai la fin avec ça :
> 
>  $ sed -ne "/MOTIF/,/^$/p" annuaire.ldif
> 
>Sed peut faire ça ?

  Salut Migrec,

  sed, peut-être… perso je ne vois pas, mais peut-être. Par contre, gawk ?

  Avec les deux fichiers joints (ldif.awk et fichier.ldif) la ligne de commande 
:

  $ gawk -v acc_name="smith" -f ldif.awk fichier.ldif

extrait l'enregistrement complet de « smith » (passé en argument). Si
j'ai bien compris ce que tu voulais obtenir, c'est un petit exemple
rudimentaire.

-- 
 ___
| $ post_tenebras ↲ | waouh!
| GNU\ /|\
|  -- * --  | o
| $ who ↲/ \|_-- ~_|
| Alexandre Hoïde   |  _/| |
 ---
dn: CN=John Smith,OU=Users,DC=contoso,DC=com
proxyAddresses: SMTP:sm...@contoso.com
proxyAddresses: smtp:john.sm...@contoso.com
proxyAddresses: smtp:jsm...@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH
sAMAccountName: smith

dn: CN=Tom Frank,OU=Users,DC=contoso,DC=com
sAMAccountName: frank
proxyAddresses: SMTP:fr...@contoso.com
proxyAddresses: smtp:tom.fr...@contoso.com
proxyAddresses: smtp:fr...@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/TOMFRANK

dn: CN=John Smith,OU=Users,DC=contoso,DC=com
proxyAddresses: SMTP:sm...@contoso.com
proxyAddresses: smtp:john.sm...@contoso.com
proxyAddresses: smtp:jsm...@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH
sAMAccountName: smith


BEGIN {
  RS = "\n\n"  # Record separator: empty line
  FS = "\n"# Field separator: newline
  acc_str = "sAMAccountName: " acc_name
}

{
  for (i = 1; i <= NF; i++) {
if (match($i, acc_str)) {
  print
  break
}
  }

}


Re: sed

2017-06-19 Par sujet Daniel Caillibaud
Le 19/06/17 à 11:17, Francois Lafont  a écrit :
FL> Hello,
FL> 
FL> On 06/19/2017 10:05 AM, Daniel Caillibaud wrote:
FL> 
FL> > ???
FL> > Un truc m'échappe, tu peux détailler la différence de résultat entre les 
deux ?
FL> 
FL> Pas de souci. Bon... toutes mes excuses par avance si c'est
FL> moi qui ai mal compris au final. ;)
FL> 
FL> Sauf erreur donc, le PO il voulait remplacer ça (chaîne brute
FL> où le \ n'a pas de signification spéciale) :

PO ?

FL> class=\"fma\"
FL> 
FL> par du vide.

Dans ce cas c'est moi qui ai mal compris, je pensais qu'il échappait le 
guillemet et voulais
remplacer toutes les chaînes `class="fma"` (et aussi par habitude du html, 
class= étant suivi
normalement d'un guillement), et ensuite j'ai lu un peu vite et pensais que le 
double
échappement était là à cause des doubles quotes mais revenait à un échappement 
du guillemet dans
l'expression à virer (alors que c'était bien l'échappement de \ qui était 
voulu).

Bref, j'avais rien compris et ma réponse était à coté du pb.

-- 
Daniel

Mieux vaut préter à sourire que donner a refléchir.



Re: sed

2017-06-19 Par sujet Francois Lafont
Hello,

On 06/19/2017 10:05 AM, Daniel Caillibaud wrote:

> ???
> Un truc m'échappe, tu peux détailler la différence de résultat entre les deux 
> ?

Pas de souci. Bon... toutes mes excuses par avance si c'est
moi qui ai mal compris au final. ;)

Sauf erreur donc, le PO il voulait remplacer ça (chaîne brute
où le \ n'a pas de signification spéciale) :

class=\"fma\"

par du vide.

La proposition de Steve Fouchet fait le job :

~$ printf '...[%s]...\n' 'class=\"fma\"' | sed 's/class=\\"fma\\"//g' 
...[]...

Ta proposition ne fonctionne pas car les \ ne sont pas pris
en compte :

~$ printf '...[%s]...\n' 'class=\"fma\"' | sed 's/class="fma"//g'
...[class=\"fma\"]...

Par ailleurs, quand bien même il y a eu méprise sur la demande
initiale du PO, tu indiquais dans ton message que ta proposition
de sed était « plus lisible » que celle de Steeve, ce qui
sous-entendait implicitement qu'elle restait équivalente (que
c'était juste une amélioration de lisibilité). Force est de
constater que les deux sed ne sont pas équivalents.

-- 
François Lafont



Re: sed

2017-06-19 Par sujet Daniel Caillibaud
Le 15/06/17 à 12:47, Francois Lafont  a écrit :
FL> On 06/15/2017 11:32 AM, Daniel Caillibaud wrote:
FL> 
FL> > SF> sed -i 's/class=\\"fma\\"//g' fichier
FL> > 
FL> > sed -i -e 's/class="fma"//g' fichier
FL> > 
FL> > me parait plus lisible
FL> 
FL> C'est plus lisible mais ça ne fait pas la même chose et ça ne résout plus
FL> le problème du PO. ;)

???
Un truc m'échappe, tu peux détailler la différence de résultat entre les deux ?

-- 
Daniel

Ce n'est pas n'importe qui qui peut-être quiconque.
Pierre Dac



Re: sed

2017-06-16 Par sujet andre_debian
On Wednesday 14 June 2017 14:28:45 JF Straeten wrote:
> > Dans un fichier texte, je souhaite retirer cette expression :
> > class=\"fma\"(remplacée par vide).

> sed  -i  's/class=\\"fma\\"//g' test
> (Quotes simples + échapper tes backslashs puisque tu cherches ça dans
> le texte...)

Super et merci,

André



Re: sed

2017-06-15 Par sujet Francois Lafont
Hello 

On 06/15/2017 11:32 AM, Daniel Caillibaud wrote:

> SF> sed -i 's/class=\\"fma\\"//g' fichier
> 
> sed -i -e 's/class="fma"//g' fichier
> 
> me parait plus lisible

C'est plus lisible mais ça ne fait pas la même chose et ça ne résout plus
le problème du PO. ;)


-- 
François Lafont



Re: sed

2017-06-15 Par sujet Daniel Caillibaud
Le 14/06/17 à 14:29, Steve Fouchet  a écrit :

SF> Salut,
SF> 
SF> Il faut échapper le caractère "\" et les guillemets, ou les remplacer
SF> par des simples.

C'est plus prudent de toujours mettre des simples dans une expression sed 
(sinon le shell
interprète l'expression avant de la passer à sed, et ça peut faire des trucs 
gênant, surtout
avec -i, si y'a du $ ou du ! dedans).

SF> sed -i 's/class=\\"fma\\"//g' fichier

sed -i -e 's/class="fma"//g' fichier

me parait plus lisible

(le -e semble pas obligatoire avec -i mais j'ai l'habitude de toujours le 
mettre, souvent -re
d'ailleurs, pour éviter la tonne de \ à mettre sur les () ou les 
quantificateurs, ou -nre)

-- 
Daniel

Certains hommes n'ont que ce qu'ils méritent, 
les autres sont célibataires.
Sacha Guitry



Re: sed

2017-06-14 Par sujet Steve Fouchet
Salut,

Il faut échapper le caractère "\" et les guillemets, ou les remplacer
par des simples.

sed -i 's/class=\\"fma\\"//g' fichier


++


Le 14/06/2017 à 14:20, andre_deb...@numericable.fr a écrit :
> sed  -i  "s/class=\"fma\"//g"   fichier



Re: sed

2017-06-14 Par sujet JF Straeten

Hello,

On Wed, Jun 14, 2017 at 02:20:53PM +0200, andre_deb...@numericable.fr wrote:

[...]
> Dans un fichier texte, je souhaite retirer cette expression :
> class=\"fma\"
> (remplacée par vide).
> 
> Je tente ceci :
> sed  -i  "s/class=\"fma\"//g"   fichier
> 
> Pas de message d'erreur, mais l'expression reste présente.

Comme ça :

sed  -i  's/class=\\"fma\\"//g' test

ça marche...

(Quotes simples + échapper tes backslashs puisque tu cherches ça dans
le texte...)

Hih,

-- 

JFS.



Re: sed ou tr

2016-01-08 Par sujet Bernard Schoenacker
Le Fri, 8 Jan 2016 18:48:39 +0100,
Daniel Caillibaud  a écrit :

> tr / ' ' < 

bonjour,

merci pour le tuyau pour tr

slt
bernard



Re: sed ou tr

2016-01-08 Par sujet Daniel Caillibaud
Le 08/01/16 à 17:44, Bernard Schoenacker  a écrit :
BS> bonjour,
BS> 
BS> je recherche le moyen de supprimer le caractère "/" avec sed et
BS> obtenir un espace, j'ai essayé avec tr -d / file.txt mais je perd
BS> l'espace

avec tr essaie plutôt
tr / ' ' < file.txt

tr semble plus indiqué que sed dans un cas aussi simple, (même si on se moque 
un peu des perfs
ici) mais le meilleur outil reste celui que tu maîtrises bien.

-- 
Daniel



Re: sed ou tr

2016-01-08 Par sujet Francois Lafont
Bonsoir,

On 08/01/2016 17:52, cedric rousselot wrote:

> vous pouvez essayer:
> sed 's/\// /g' file.txt
> 
> Si le resultat vous convient vous pouvez le faire dans le fichier:
> sed -i 's/\// /g' file.txt

Juste pour info, si jamais le caractère « / » est utilisé dans les regex voire 
utilisé souvent (typiquement pour des chemins de fichiers etc.), alors plutôt 
que d'échapper chaque caractère « / » avec un backslash, sed nous permet 
d'utiliser un autre délimiteur que « / ». En fait, on peut choisir plus ou 
moins le délimiteur qu'on veut. Par exemples :

sed 's|/| |g' file.txt
sed 's#/# #g' file.txt

Et bien sûr dans ce cas, on n'est plus obligé d'échapper nos « / ». Voilà, 
c'était juste pour info. ;)
Et sinon effectivement tr -d '/' se contente de supprimer les « / » comme 
l'indique sa page man (enfin j'imagine).

À+

-- 
François Lafont



Re: sed ou tr

2016-01-08 Par sujet Bernard Schoenacker
Le Fri, 8 Jan 2016 17:52:27 +0100,
cedric rousselot  a écrit :

> Bonjour,
> vous pouvez essayer:
> sed 's/\// /g' file.txt
> 
> Si le resultat vous convient vous pouvez le faire dans le fichier:
> sed -i 's/\// /g' file.txt
> 
> Cordialement,
> Cedric rousselot.

bonjour,

la première solution fonctionne à merveille

slt
bernard



Re: sed ou tr

2016-01-08 Par sujet cedric rousselot
Bonjour,
vous pouvez essayer:
sed 's/\// /g' file.txt

Si le resultat vous convient vous pouvez le faire dans le fichier:
sed -i 's/\// /g' file.txt

Cordialement,
Cedric rousselot.

Le Fri, 8 Jan 2016 17:44:22 +0100,
Bernard Schoenacker  a écrit :

> bonjour,
> 
> je recherche le moyen de supprimer le caractère "/" avec sed et
> obtenir un espace, j'ai essayé avec tr -d / file.txt mais je perd
> l'espace
> 
> voici un extrait à traiter de file.txt :
> 
> math/coinmp
> x11-fonts/gentium-basic
> net/GeoIP
> graphics/ImageMagick
> devel/ORBit2
> graphics/OpenEXR
> security/openssh-askpass
> x11-fm/thunar
> print/a2ps
> 
> 
> avec tr -d / j'obtiens ceci :
> 
> mathcoinmp
> x11-fontsgentium-basic
> netGeoIP
> graphicsImageMagick
> develORBit2
> 
> et je souhaiterai obtenir:
> 
> math coinmp
> x11-fonts gentium-basic
> net GeoIP
> graphics ImageMagick
> 
> comment corriger le tir ?
> 
> slt
> bernard
> 



Re: sed ou tr

2016-01-08 Par sujet VieuxGeek DuSystem
Bonjour

Avec vim dans le fichier originale

la commande est '%s/\// /g'

Cordialement
et bon weekend
Stef

Le 8 janvier 2016 à 17:44, Bernard Schoenacker
 a écrit :
> bonjour,
>
> je recherche le moyen de supprimer le caractère "/" avec sed et
> obtenir un espace, j'ai essayé avec tr -d / file.txt mais je perd
> l'espace
>
> voici un extrait à traiter de file.txt :
>
> math/coinmp
> x11-fonts/gentium-basic
> net/GeoIP
> graphics/ImageMagick
> devel/ORBit2
> graphics/OpenEXR
> security/openssh-askpass
> x11-fm/thunar
> print/a2ps
>
>
> avec tr -d / j'obtiens ceci :
>
> mathcoinmp
> x11-fontsgentium-basic
> netGeoIP
> graphicsImageMagick
> develORBit2
>
> et je souhaiterai obtenir:
>
> math coinmp
> x11-fonts gentium-basic
> net GeoIP
> graphics ImageMagick
>
> comment corriger le tir ?
>
> slt
> bernard
>



Re: sed ne supprime pas les lignes que je veux.

2009-05-27 Par sujet Franck Delage
Amandine VITAL a écrit :
| Merci :)
| Amandine

oh mais avec grand plaisir.

-- 
Franck Delage
Création et hébergements de sites web
www.web82.net


signature.asc
Description: Digital signature


Re: sed ne supprime pas les lignes que je veux.

2009-05-27 Par sujet Nicolas Gadoux

Salut,
essaye plutôt

$ sed '/awk/d' -i mon_fichier.txt


RTFM :

$ man sed
(...)
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied))
(...)


Nicolas


Amandine VITAL a écrit :

hello,

j'essaie de supprimer des lignes contenants certaines caractères, et
ça ne supprime pas.
Pourquoi ?

$ sed '/awk/d' mon_fichier.txt

si je fais un cat de mon_fichier.txt
awk reste toujours dans le fichier.

Amandine
  


--
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-requ...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmas...@lists.debian.org



Re: sed ne supprime pas les lignes que je veux.

2009-05-27 Par sujet Amandine VITAL
> | j'essaie de supprimer des lignes contenants certaines caractères, et
> | ça ne supprime pas.
> | Pourquoi ?
> |
> | $ sed '/awk/d' mon_fichier.txt
>
> parce que tu oublies le -i :
>
> $ sed -i '/awk/d' mon_fichier.txt

Merci :)
Amandine

--
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-requ...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmas...@lists.debian.org



Re: sed ne supprime pas les lignes que je veux.

2009-05-27 Par sujet Franck Delage
Amandine VITAL a écrit :
| hello,

Salut,

| j'essaie de supprimer des lignes contenants certaines caractères, et
| ça ne supprime pas.
| Pourquoi ?
| 
| $ sed '/awk/d' mon_fichier.txt

parce que tu oublies le -i : 

$ sed -i '/awk/d' mon_fichier.txt

et voili voilou.

-- 
Franck Delage
Création et hébergements de sites web
www.web82.net


signature.asc
Description: Digital signature


Re: Sed - Caractères sp éciaux

2009-03-13 Par sujet Jacques L'helgoualc'h
Remys.Morrissette a écrit, samedi 14 mars 2009, à 01:15 :
> Rebonjour,

Re.

> bon, j'avoue ne plus y comprendre grand chose. après plusieurs essaie.
>
> en remplaçant simplement '/' par une autre caractère '%'
> et nul besoin de mettre '\' devant les espaces, point, etc.

Tu n'aurais  besoin de protéger chaque  espace que si  tu ne « quotais »
pas toute  la commande  --- par contre,  le point est  un méta-caractère
dans le premier  membre de la substitution, donc tu  dois utiliser \. ou
[.] pour ne pas accepter n'importe quoi à cet endroit...
-- 
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-requ...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmas...@lists.debian.org



Re: Sed - Caractères spéciaux

2009-03-12 Par sujet Remys.Morrissette

Rebonjour,

bon, j'avoue ne plus y comprendre grand chose. après plusieurs essaie.

en remplaçant simplement '/' par une autre caractère '%'
et nul besoin de mettre '\' devant les espaces, point, etc.

ne pas oublier '*' à la fin car sur tous les fichiers.

sed -i -e 's,/>,/>,g' *


fonctionne très bien.

--
Remys

--
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-requ...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmas...@lists.debian.org



Re: Sed - Caractères spéciaux

2009-03-12 Par sujet GouNiNi

Bonjour,

Je pense que tu eux t'en sortir comme ça :

echo '' | sed
-re "s?(.*)index_pp.html(.*)?\1./index_pp.html\2?"

A étoffer si besoin, mais chez moi le résultat voulu est là.

Cordialement

-- 
  .`'`.   GouNiNi
 :  ': :  
 `. ` .`  GNU/Linux
   `'`http://www.geekarea.fr


On Fri, 13 Mar 2009 02:12:49 -0400, Remys Morrissette
 wrote:
> Bonjour,
> 
> je veux modifier une chaîne de texte dans plusieurs fichier.
> le 'défi' ; des caractères spéciaux de html tel que ./ > = . < "
> 
> j'utilise la commande suivante qui fonctionne très bien sur un mot
unique
> 
> for file in *; do sed -i 's/old/new/g' $file; done
> 
> le texte à remplacer :
> 
> 
> 
> par
> 
> 
> 
> à la limite 'index_pp.html' par './index_pp.html' mais c'est agréable 
> dans avoir plus dans le 'défi. ;-)
> 
> 
> En gros quel est le 'joker' `utiliser pour encadrer ma chaîne de texte.
> 
> Merci
> 
> -- 
> Remys


-- 
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:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: Sed - Caractères spéciaux

2009-03-12 Par sujet GouNiNi

Bonjour,

Je pense que tu eux t'en sortir comme ça :

echo '' | sed
-re "s?(.*)index_pp.html(.*)?\1./index_pp.html\2?"

A étoffer si besoin, mais chez moi le résultat voulu est là.

Cordialement

-- 
  .`'`.   GouNiNi
 :  ': :  
 `. ` .`  GNU/Linux
   `'`http://www.geekarea.fr




On Fri, 13 Mar 2009 02:12:49 -0400, Remys Morrissette
 wrote:
> Bonjour,
> 
> je veux modifier une chaîne de texte dans plusieurs fichier.
> le 'défi' ; des caractères spéciaux de html tel que ./ > = . < "
> 
> j'utilise la commande suivante qui fonctionne très bien sur un mot
unique
> 
> for file in *; do sed -i 's/old/new/g' $file; done
> 
> le texte à remplacer :
> 
> 
> 
> par
> 
> 
> 
> à la limite 'index_pp.html' par './index_pp.html' mais c'est agréable 
> dans avoir plus dans le 'défi. ;-)
> 
> 
> En gros quel est le 'joker' `utiliser pour encadrer ma chaîne de texte.
> 
> Merci
> 
> -- 
> Remys

-- 
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:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: Sed - Caractères sp éciaux

2009-03-12 Par sujet Jacques L'helgoualc'h
Remys Morrissette a écrit, vendredi 13 mars 2009, à 02:12 :
> Bonjour,

bonjour,

> je veux modifier une chaîne de texte dans plusieurs fichier.
> le 'défi' ; des caractères spéciaux de html tel que ./ > = . < "
>
> j'utilise la commande suivante qui fonctionne très bien sur un mot unique
>
> for file in *; do sed -i 's/old/new/g' $file; done

Tu peux supprimer la boucle :

 sed -i -e 's/old/new/g' *

(ou -i.old).

> le texte à remplacer :
>
> 
>
> par
>
> 
>
> à la limite 'index_pp.html' par './index_pp.html' mais c'est agréable  
> dans avoir plus dans le 'défi. ;-)
>
> En gros quel est le 'joker' `utiliser pour encadrer ma chaîne de texte.

Le délimiteur de la substitution est libre, donc

 sed -e 's,","./",'

ferait l'affaire  en insérant « ./ » après la  première double-quote (si
ton exemple est une ligne complète) ; sinon, essaie d'être plus précis :

 sed -e 's,href="index_pp,href="./index_pp,g'

et/ou utilise une adresse de ligne pour limiter les confusions :

 sed -i.old -e \
'/href="index_pp\.html">/ s,href="index_pp,href="./index_pp,g'

> 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:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2009-01-01 Par sujet njko
Salut à tou-te-s

Bonne idée vim et quoi qu'il en soit merci pour vos réponses, je vais
essayer ça sans tarder...

(En fait j'avais fait ça avec sed y'a qqes années mais ayant pas trop
touché de boites à boutons depuis un bon bout de temps, j'ai pas été foutu
de me rappeler bien comment)

Merci à tous et bonne année!

++


njko


> On Wed, 24 Dec 2008 10:39:45 +, Arnaud Delobelle
>> Personne n'a mentionné awk (pas testé):
>>
>> awk '{r[i++%25]=$0;if(i>=25)print r[i%25]}END{print"Le mot de la fin"}'
>>
>> C'est plus long que sed mais au moins c'est lisible...
>> C'est moins long que perl *et* c'est lisible :)
>
> Et pourquoi pas vim tant qu'on y est :D
>
> vim +$-25,$s/\_.*/nouveaumot/g +wq test
>
> Moi c'est ce que je trouve le plus lisible, court et naturel !
>
>> Joyeux noël!
>
> Oui Joyeux Noël à tous, et bonne ann.. ah non, on n'a pas encore le droit
> ;)
>
> --
> Lisez la FAQ de la liste avant de poser une question :
> http://wiki.debian.org/DebFrFrenchLists
> Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
> "Reply-To:"
>
> To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact
> listmas...@lists.debian.org
>
>


-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Arnaud Delobelle


On 24 Dec 2008, at 12:29, François Boisson wrote:


head -n-25 fichier && echo lemotdelafin


OK mais je soupçonne que head -n{nombre négatif} soit spécifique à GNU
head donc pas très portable.

--
Arnaud

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Philippe Merlin
Le mercredi 24 décembre 2008, François Boisson a écrit :
> > Le but était de garder tout sauf les 25 dernières lignes pas de garder
> > les 25 dernières et c'est justement pour ça qu'on fait tous mumuse
> > depuis hier ^^
>
> head -n-25 fichier && echo lemotdelafin
>
> François Boisson
>
> > Je remarque d'ailleurs que personne n'a encore proposé de le faire avec
> > php ;)
>
> Tu le veux en brainfuck :)?

Désolé François je n'avais pas encore vu ta solution.
Philippe

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Jacques L'helgoualc'h
Mathieu JANIN a écrit, mercredi 24 décembre 2008, à 12:07 :
[...]
> Ben oui, mais finalement, on est encore en dessous en faisant bêtement:
> 
> tail -n25  && echo Le mot de la fin.

Ah que non, tu ne conserves que les 25 dernières lignes, celles qu'il
faut effacer :

~ $ echo {1..42}|sed 's/ /\n/g'| \
tail -n25&&echo Le mot de la fin.
18
19
20
[...]
42
Le mot de la fin.

> Ca ne dépasse pas 35 caractères sans compter le nom du fichier

Bah, il  ne compte pas,  le jeu est  de piper (histoire  de disqualifier
ceux qui lisent deux fois le fichier :).

> (40 si on se met à  égalité par rapport aux autres shells en préfixant
> par sh -c ): il y a peut être plus d'une manière de faire, mais autant
> en revenir au commandes basiques qui ne font qu'une chose mais le font
> bien.
> 
> non ?

Bien, heu, le double tac plus bas doit être assez goret ?

> Arf.

Arf++

~ $ echo {1..42}|sed 's/ /\n/g'| \
tac|tail -n+26|tac&&echo Le mot de la fin.
1
2
3
[...]
17
Le mot de la fin.

*42* caractères, le compte est bon... Joyeux Noël !
-- 
Jacques L'helgoualc'h

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Philippe Merlin
Le mercredi 24 décembre 2008, Kevin Hinault a écrit :
> Le 24 décembre 2008 12:07, Mathieu JANIN  a écrit :
> > Ben oui, mais finalement, on est encore en dessous en faisant bêtement:
> >
> > tail -n25  && echo Le mot de la fin.
> >
> > Ca ne dépasse pas 35 caractères sans compter le nom du fichier (40 si on
> > se met à égalité par rapport aux autres shells en préfixant par sh -c ):
> > il y a peut être plus d'une manière de faire, mais autant en revenir au
> > commandes basiques qui ne font qu'une chose mais le font bien.
> >
> > non ?
>
> non :)
>
> Le but était de garder tout sauf les 25 dernières lignes pas de garder
> les 25 dernières et c'est justement pour ça qu'on fait tous mumuse
> depuis hier ^^
>
> Je remarque d'ailleurs que personne n'a encore proposé de le faire avec php
> ;)

moi je me lance avec une variante :
head --lines=-25  && echo " Le mot de la fin".
bon noël.
Philippe

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Etienne CROMBEZ
Le 24 décembre 2008 12:18, Jean-Baptiste Hétier  a écrit :

> Et pourquoi pas vim tant qu'on y est :D
>
> vim +$-25,$s/\_.*/nouveaumot/g +wq test
>
> Moi c'est ce que je trouve le plus lisible, court et naturel !
>
> > Joyeux noël!


Je prefere toujours tail et diff
c'est ce qui me semble etre le plus lisible


Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Jacques L'helgoualc'h
Arnaud Delobelle a écrit, mercredi 24 décembre 2008, à 10:39 :
> Personne n'a mentionné awk (pas testé):
>
> awk '{r[i++%25]=$0;if(i>=25)print r[i%25]}END{print"Le mot de la fin"}'

  awk '{r[i++%26]=$0}i>25{print r[i%26]}END{print"Le mot de la fin."}'

(à la dernière impression, le tableau contient les 25 lignes oubliées et
celle qu'on imprime). Variante :

  awk 'NR>25{print r[NR%25]}{r[NR%25]=$0}END{print"Le mot de la fin."}'

-- 
Jacques L'helgoualc'h

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet François Boisson

> Le but était de garder tout sauf les 25 dernières lignes pas de garder
> les 25 dernières et c'est justement pour ça qu'on fait tous mumuse
> depuis hier ^^
> 

head -n-25 fichier && echo lemotdelafin

François Boisson


> Je remarque d'ailleurs que personne n'a encore proposé de le faire avec
> php ;)
> 

Tu le veux en brainfuck :)?

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Kevin Hinault
Le 24 décembre 2008 12:07, Mathieu JANIN  a écrit :
> Ben oui, mais finalement, on est encore en dessous en faisant bêtement:
>
> tail -n25  && echo Le mot de la fin.
>
> Ca ne dépasse pas 35 caractères sans compter le nom du fichier (40 si on se
> met à égalité par rapport aux autres shells en préfixant par sh -c ): il y a
> peut être plus d'une manière de faire, mais autant en revenir au commandes
> basiques qui ne font qu'une chose mais le font bien.
>
> non ?

non :)

Le but était de garder tout sauf les 25 dernières lignes pas de garder
les 25 dernières et c'est justement pour ça qu'on fait tous mumuse
depuis hier ^^

Je remarque d'ailleurs que personne n'a encore proposé de le faire avec php ;)

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Jean-Baptiste Hétier

On Wed, 24 Dec 2008 10:39:45 +, Arnaud Delobelle
> Personne n'a mentionné awk (pas testé):
> 
> awk '{r[i++%25]=$0;if(i>=25)print r[i%25]}END{print"Le mot de la fin"}'
> 
> C'est plus long que sed mais au moins c'est lisible...
> C'est moins long que perl *et* c'est lisible :)

Et pourquoi pas vim tant qu'on y est :D

vim +$-25,$s/\_.*/nouveaumot/g +wq test

Moi c'est ce que je trouve le plus lisible, court et naturel !

> Joyeux noël!

Oui Joyeux Noël à tous, et bonne ann.. ah non, on n'a pas encore le droit
;)

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Mathieu JANIN
Le mercredi 24 décembre 2008, Kevin Hinault a écrit :
> Le 23 décembre 2008 21:34, Jacques L'helgoualc'h  a 
écrit :
> > Jacques L'helgoualc'h a écrit, mardi 23 décembre 2008, à 18:53 :
> > sed -ne '1h;2,25H;26,${H;g;P;s/^[^\n]*\n//;h};$aLe mot de la fin.'
> > .<- un -> <- deux --> <- trois ->
> >
> > 66 caractères, contre 79 avec Perl :P
>
> Bien  joué :)
>
> Comme on dit : [There is more than one way to do it]
>
>
> Joyeux noël à tous en passant !

Ben oui, mais finalement, on est encore en dessous en faisant bêtement:

tail -n25  && echo Le mot de la fin.

Ca ne dépasse pas 35 caractères sans compter le nom du fichier (40 si on se 
met à égalité par rapport aux autres shells en préfixant par sh -c ): il y a 
peut être plus d'une manière de faire, mais autant en revenir au commandes 
basiques qui ne font qu'une chose mais le font bien.

non ?

Arf.

++, MATT

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Jacques L'helgoualc'h
Arnaud Delobelle a écrit, mercredi 24 décembre 2008, à 10:39 :
[...]
> Personne n'a mentionné awk (pas testé):
>
> awk '{r[i++%25]=$0;if(i>=25)print r[i%25]}END{print"Le mot de la fin"}'
>
> C'est plus long que sed mais au moins c'est lisible...

Tu as oublié le point final --- mais i>24, et ton compte est bon...

Lisible, pfff... Sed est naturellement obfusqué !

> C'est moins long que perl *et* c'est lisible :)

 :)

> Joyeux noël!

Bonnes fêtes à tous !
-- 
Jacques L'helgoualc'h

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Arnaud Delobelle


On 23 Dec 2008, at 20:34, Jacques L'helgoualc'h wrote:


Jacques L'helgoualc'h a écrit, mardi 23 décembre 2008, à 18:53 :
[...] chercher l'émulation de tail.

Tout bêtement dans « info sed »...

Il me semble  que dans les trésors de  http://sed.sf.net on peut  
trouver

une méthode de fenêtre glissante FIFO qui permet, appliquée ici,

- de stocker les 25 premières lignes ;

- puis écrire la première, l'effacer et ajouter la nouvelle en  
queue ;


- et faire la substitution demandée, une fois avalée la dernière  
ligne...


sed -ne '1h;2,25H;26,${H;g;P;s/^[^\n]*\n//;h};$aLe mot de la fin.'
.<- un -> <- deux --> <- trois ->

66 caractères, contre 79 avec Perl :P


Personne n'a mentionné awk (pas testé):

awk '{r[i++%25]=$0;if(i>=25)print r[i%25]}END{print"Le mot de la fin"}'

C'est plus long que sed mais au moins c'est lisible...
C'est moins long que perl *et* c'est lisible :)

Joyeux noël!

--
Arnaud

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-24 Par sujet Kevin Hinault
Le 23 décembre 2008 21:34, Jacques L'helgoualc'h  a écrit :
>
> Jacques L'helgoualc'h a écrit, mardi 23 décembre 2008, à 18:53 :
> sed -ne '1h;2,25H;26,${H;g;P;s/^[^\n]*\n//;h};$aLe mot de la fin.'
> .<- un -> <- deux --> <- trois ->
>
> 66 caractères, contre 79 avec Perl :P

Bien  joué :)

Comme on dit : [There is more than one way to do it]


Joyeux noël à tous en passant !

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-23 Par sujet Jacques L'helgoualc'h
Jacques L'helgoualc'h a écrit, mardi 23 décembre 2008, à 18:53 :
[...] chercher l'émulation de tail. 

Tout bêtement dans « info sed »...

> Il me semble  que dans les trésors de  http://sed.sf.net on peut trouver
> une méthode de fenêtre glissante FIFO qui permet, appliquée ici,
> 
>  - de stocker les 25 premières lignes ;
> 
>  - puis écrire la première, l'effacer et ajouter la nouvelle en queue ;
> 
>  - et faire la substitution demandée, une fois avalée la dernière ligne...

sed -ne '1h;2,25H;26,${H;g;P;s/^[^\n]*\n//;h};$aLe mot de la fin.'
.<- un -> <- deux --> <- trois ->

66 caractères, contre 79 avec Perl :P
-- 
Jacques L'helgoualc'h

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-23 Par sujet Arnaud Delobelle
Jacques L'helgoualc'h  writes:

> Kevin Hinault a écrit, mardi 23 décembre 2008, à 17:50 :
>> Le 23 décembre 2008 17:05, Daniel Caillibaud  a 
>> écrit
>> :
>> 
>> > Jacques L'helgoualc'h a écrit :
>> >
>> >> Daniel Caillibaud a écrit, mardi 23 décembre 2008, à 10:15 :
>> >>
>> >>> njko a écrit :
>> >>>
>> >>
>> 
>> Juste parce que ça m'amusait de le faire en perl :
>> 
>> $ perl -e 'while(<>){$i++;push(@buf,$_);print shift(@buf) if($i>25);}'
>> lefichier
>> 
>> J'écoute toute améliorations bien sûr ;)
>
> perl -e 'while(<>){p...@b,$_;print sh...@b if++$i>25}print"Le mot de la 
> fin\n"'

Version lisible:

$ python -c "import sys
acc = []
for line in open(sys.argv[1]):
acc.append(line)
if len(acc) > 25: print acc.pop(0)
print 'Le mot de la fin'
" monfichier

;)

-- 
Arnaud

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-23 Par sujet Kevin Hinault
Le 23 décembre 2008 20:00, Jacques L'helgoualc'h

> a écrit :

>
> perl -e 'while(<>){p...@b,$_;print sh...@b if++$i>25}print"Le mot de la
> fin\n"'
>
>
Arf oui merci je l'avais oublié ce mot :)


Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-23 Par sujet Jacques L'helgoualc'h
Kevin Hinault a écrit, mardi 23 décembre 2008, à 17:50 :
> Le 23 décembre 2008 17:05, Daniel Caillibaud  a écrit
> :
> 
> > Jacques L'helgoualc'h a écrit :
> >
> >> Daniel Caillibaud a écrit, mardi 23 décembre 2008, à 10:15 :
> >>
> >>> njko a écrit :
> >>>
> >>
> 
> Juste parce que ça m'amusait de le faire en perl :
> 
> $ perl -e 'while(<>){$i++;push(@buf,$_);print shift(@buf) if($i>25);}'
> lefichier
> 
> J'écoute toute améliorations bien sûr ;)

perl -e 'while(<>){p...@b,$_;print sh...@b if++$i>25}print"Le mot de la fin\n"'

-- 
Jacques L'helgoualc'h

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-23 Par sujet Jacques L'helgoualc'h
Daniel Caillibaud a écrit, mardi 23 décembre 2008, à 17:05 :
> Jacques L'helgoualc'h a écrit :
>> Daniel Caillibaud a écrit, mardi 23 décembre 2008, à 10:15 :
>>> njko a écrit :
>> [...]
 Comment dire à sed de remplacer les n dernieres lignes de différents
 fichiers par un mot?
>>> Directement, tu ne peux pas.
>>
>> Mécréant ! Sed est Turing-complet, il /peut/ le faire :
>>
>> ~ $ echo {1..12} | sed 's/ /\n/g' | \
>> sed -nre 'H;${g;s/(\n[^\n]*){0,25}$/\nIN MEMORIAM MAXI 25 LIGNES, 
>> AMEN/;s/^\n//p}'
>> IN MEMORIAM MAXI 25 LIGNES, AMEN
>
> Évidemment, mais là tu charge tout dans le holdspace et tu appliques une 
> regex dessus, ça sort du concept "stream editor" (mais c'est possible), 
> dans la mesure où tu dois attendre d'avoir atteint la fin du fichier (en 
> ayant tout chargé en attendant) pour commencer à travailler. Sur un petit 
> fichier ça va, sur un log de qq centaines de Mo c'est moins top ;-)

Oui, c'est un peu goret de  tout lire avant de commencer à bosser (c'est
pour ça que je suggérais de chercher l'émulation de tail). 

Il me semble  que dans les trésors de  http://sed.sf.net on peut trouver
une méthode de fenêtre glissante FIFO qui permet, appliquée ici,

 - de stocker les 25 premières lignes ;

 - puis écrire la première, l'effacer et ajouter la nouvelle en queue ;

 - et faire la substitution demandée, une fois avalée la dernière ligne...


> Bref, je pense que wc + head reste le plus adapté à ce cas de figure.

C'est sans doute plus simple, en effet --- même si on peut aussi
l'écrire avec Sed :) --- mais  tu lis deux fois tout le fichier,
ce qui  n'est pas indiqué  avec un ruban, des  cartes perforées,
une bande magnétique ou un pipe :P

> PS:  pour  ceux qui  veulent  comprendre,  un  peu d'explications  sur
> l'expression sed de Jacques (un script sed s'applique sur chaque ligne
> en entrée)
> 

Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-23 Par sujet Kevin Hinault
Le 23 décembre 2008 17:05, Daniel Caillibaud  a écrit
:

> Jacques L'helgoualc'h a écrit :
>
>> Daniel Caillibaud a écrit, mardi 23 décembre 2008, à 10:15 :
>>
>>> njko a écrit :
>>>
>>

Juste parce que ça m'amusait de le faire en perl :

$ perl -e 'while(<>){$i++;push(@buf,$_);print shift(@buf) if($i>25);}'
lefichier

J'écoute toute améliorations bien sûr ;)

Kévin


Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-23 Par sujet Daniel Caillibaud

Jacques L'helgoualc'h a écrit :

Daniel Caillibaud a écrit, mardi 23 décembre 2008, à 10:15 :

njko a écrit :

[...]

Comment dire à sed de remplacer les n dernieres lignes de différents
fichiers par un mot?

Directement, tu ne peux pas.


Mécréant ! Sed est Turing-complet, il /peut/ le faire :

~ $ echo {1..12} | sed 's/ /\n/g' | \
sed -nre 'H;${g;s/(\n[^\n]*){0,25}$/\nIN MEMORIAM MAXI 25 LIGNES, 
AMEN/;s/^\n//p}'
IN MEMORIAM MAXI 25 LIGNES, AMEN


Évidemment, mais là tu charge tout dans le holdspace et tu appliques une regex dessus, ça sort du concept "stream editor" (mais c'est possible), dans 
la mesure où tu dois attendre d'avoir atteint la fin du fichier (en ayant tout chargé en attendant) pour commencer à travailler. Sur un petit fichier 
ça va, sur un log de qq centaines de Mo c'est moins top ;-)


Bref, je pense que wc + head reste le plus adapté à ce cas de figure.

--
Daniel


PS: pour ceux qui veulent comprendre, un peu d'explications sur l'expression 
sed de Jacques (un script sed s'applique sur chaque ligne en entrée)

Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-23 Par sujet Jacques L'helgoualc'h
Daniel Caillibaud a écrit, mardi 23 décembre 2008, à 10:15 :
> njko a écrit :
[...]
>> Comment dire à sed de remplacer les n dernieres lignes de différents
>> fichiers par un mot?
>
> Directement, tu ne peux pas.

Mécréant ! Sed est Turing-complet, il /peut/ le faire :

~ $ echo {1..12} | sed 's/ /\n/g' | \
sed -nre 'H;${g;s/(\n[^\n]*){0,25}$/\nIN MEMORIAM MAXI 25 LIGNES, 
AMEN/;s/^\n//p}'
IN MEMORIAM MAXI 25 LIGNES, AMEN

~ $ echo {1..42} | sed 's/ /\n/g' | \
sed -nre 'H;${g;s/(\n[^\n]*){0,25}$/\nIN MEMORIAM MAXI 25 LIGNES, 
AMEN/;s/^\n//p}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
IN MEMORIAM MAXI 25 LIGNES, AMEN

-- 
Jacques L'helgoualc'h

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-23 Par sujet Jacques L'helgoualc'h
njko a écrit, mardi 23 décembre 2008, à 02:52 :
> Salut la liste!

bonjour,

> Un petit message car je galère avec sed
> Je souhaiterais supprimer les 25 dernières lignes de plusieurs fichiers,
> et y mettre à la place un simple mot.
> 
> D'apres ce que j'ai compris de la doc, j'ai tenté quelques commandes,
> jamais bon.
> 
> sed -i -e "s/$-25/nouveaumot/g" *.php

Tu devrais plutôt utiliser -i.old pour tes essais ;)

> par exemple.. me rajoute un nouveaumot à chaque ligne.

« s/$-25/.../ » est une erreur, tu  mélanges adresse de ligne, et regexp
à substituer...

> Comment dire à sed de remplacer les n dernieres lignes de différents
> fichiers par un mot?

Les n premières, c'est facile,  donc tu pourrais passer par « tac » pour
lire ta source à l'envers, avant un « sed -e '1,25 s/.*/lemot/' ».

> Quelqun-e aurait une piste?

Tu peux fouiner  dans les trésors de http://sed.sf.net/,  ou dans « info
sed », il me semble qu'il y a une astuce pour émuler tail...

> Merci et bonne continuation!

de rien, amuse-toi bien,
-- 
Jacques L'helgoualc'h

-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed: remplacer les dernieres lignes de fichiers par un mot...

2008-12-23 Par sujet Daniel Caillibaud

njko a écrit :

Salut la liste!

Un petit message car je galère avec sed
Je souhaiterais supprimer les 25 dernières lignes de plusieurs fichiers,
et y mettre à la place un simple mot.


sed veut dire "stream editor", c'est pour éditer un flux, et par définition, un flux, on ne peut pas savoir s'il est bientôt fini ou pas, on s'en 
aperçoit quand il est tari...

Quand sed lit une ligne, "il" ne peut donc pas savoir combien il en reste dans 
le fichier.



D'apres ce que j'ai compris de la doc, j'ai tenté quelques commandes,
jamais bon.

sed -i -e "s/$-25/nouveaumot/g" *.php


Mmm, tu as pas dû lire beaucoup de doc ;-)
Regarde http://ll.lairdutemps.org/linux/sed et les liens en début de page (il 
faut remettre à la main le bon n° version pour abs).


Comment dire à sed de remplacer les n dernieres lignes de différents
fichiers par un mot?


Directement, tu ne peux pas.


Quelqun-e aurait une piste?


- compter d'abord le nb de lignes
lignes=$(wc -l < fichier)
start=$((lignes - 25))

puis un truc genre

sed -e "${start}"',$ c ton_mot' < fichier > fichier.new
ou
sed -i .old -e "${start}"',$ c ton_mot' fichier

- mais sed est pas très utile dans ce cas, un simple

head -$start < fichier > fichier.new
echo ton_mot >> fichier.new

suffirait.

--
Daniel

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: sed debud de fichier a pattern

2006-07-26 Par sujet De Leeuw Guy
merci 
Guy

[EMAIL PROTECTED] wrote:
> De Leeuw Guy a écrit :
>> Bonjour à tous,
>>
>> J'aimerais écrire un script qui m'enlève les headers d'un fichier de
>> message.
>> la première ligne vide du fichier est la séparation entre le header et
>> le body.
>> comment faire pour prendre de la 1ere ligne au pattern "^$" ?
>>
>
> Bonjour,
>
> sed -ne '1,/^$/p'
>
> Cdlt.
>
>

-- 
Guy De Leeuw
EDP Manager
Eurofer ASBL
211, rue du noyer
1000, Bruxelles
Belgium
Phone : +32 (2) 738 79 40
Fax : +32 (2) 736 28 22
E-Mail : mailto:[EMAIL PROTECTED]
www : http://www.eurofer.org


-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench   
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: sed debud de fichier a pattern

2006-07-26 Par sujet mpefra-nospam

De Leeuw Guy a écrit :

Bonjour à tous,

J'aimerais écrire un script qui m'enlève les headers d'un fichier de
message.
la première ligne vide du fichier est la séparation entre le header et
le body.
comment faire pour prendre de la 1ere ligne au pattern "^$" ?



Bonjour,

sed -ne '1,/^$/p'

Cdlt.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench   
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et

"Reply-To:"

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: sed et substitution de majuscules

2004-05-28 Par sujet Matthieu
Le ven 28/05/2004 à 09:46, Manuel VACELET a écrit :
> Thomas Nemeth wrote:
> 
> > Ce n'est _pas_ une bonne idée, ÀMHA.
> > Dans ce cas tu vas transformer *tout* le texte en minuscules.
> > Je suppose que dans un fichier HTML, il n'y a pas que des liens
> > avec des noms de fichiers en majuscules : il doit y avoir du
> > texte normal...
> Oui,
> Il ne s'agit que d'une piste, pour illustrer l'utilisation de tr. J'ai 
> oublié de le préciser.


ou  'tr [:upper:] [:lower:]'



Re: sed et substitution de majuscules

2004-05-28 Par sujet François TOURDE
Le 12566ième jour après Epoch,
franck Molle écrivait:

> Yves Rutschle a écrit :
>> On Fri, May 28, 2004 at 09:53:57AM +0200, Charles Plessy wrote:
>>
>>>Et si tu renommais plutôt les images?
>> Une idée brillante, puisqu'il suffit alors de faire:
>> rename 'tr/a-z/A-Z/' *.jpg
>> Y.
>>
> non cette methode ne convient pas car certaines images en miniscules
> sont quant a elles appelees correctement.

Tu peux essayer, si tu en as le courage, de remplacer la page d'erreur
404 par un traitement qui va déterminer si le refereur (dans ce cas,
l'image absente) existe en majuscules, si oui le servir et
éventuellement le renommer, si non faire une vraie erreur 404.

Pense à tracer ces traitement, pour voir si par hasard une image n'est
pas référencée à la fois en MAJ et min ...

Mes 2¢

-- 
If loving linux is wrong, I dont wanna be right.
-- Topic for #LinuxGER



Re: sed et substitution de majuscules

2004-05-28 Par sujet franck Molle

Yves Rutschle a écrit :

On Fri, May 28, 2004 at 09:53:57AM +0200, Charles Plessy wrote:


Et si tu renommais plutôt les images?



Une idée brillante, puisqu'il suffit alors de faire:
rename 'tr/a-z/A-Z/' *.jpg

Y.


non cette methode ne convient pas car certaines images en miniscules 
sont quant a elles appelees correctement.


Merci qd meme ;)

bye

--
*
* Franck MOLLE  *
* Animateur de Secteur  *
* Relais assistance Tice, Louviers-Vernon   *
*



Re: sed et substitution de majuscules

2004-05-28 Par sujet Yves Rutschle
On Fri, May 28, 2004 at 09:53:57AM +0200, Charles Plessy wrote:
> Et si tu renommais plutôt les images?

Une idée brillante, puisqu'il suffit alors de faire:
rename 'tr/a-z/A-Z/' *.jpg

Y.



Re: sed et substitution de majuscules

2004-05-28 Par sujet Jacques L'helgoualc'h
[EMAIL PROTECTED] a écrit, vendredi 28 mai 2004, à 01:31 :
> Bonjour,

bonjour.

> Voila le pb, je dois mettre en ligne un site web mais j'ai tout un tas
> de page web htlm qui appellent des fichiers images en majuscules alors
> qu'il sont stockés en minuscules sur le serveur.
> [...]
> sed ou s en perl pour demander le remplacement de tout caractère en
> majuscule en une minuscule ?

sed 's/REGEXP/\L&/g'

> Merci d'avance de vos précisions :)

Pour convertir seulement le nom \3, sans toucher au chemin \2

sed -r 's!(

Re: sed et substitution de majuscules

2004-05-28 Par sujet Charles Plessy
On Fri, May 28, 2004 at 01:31:40AM +0200, [EMAIL PROTECTED] wrote:
> Bonjour,
> 
> Voila le pb, je dois mettre en ligne un site web mais j'ai tout un tas de 
> page web htlm qui appellent des
> fichiers images en majuscules alors qu'il sont stockés en minuscules
> sur le serveur.
> 
> A la place d'éditer chaque fichier html a la mimine et y passer bon
> nombres d'heures, j'ai pensé à un script bash ou perl qui pourrait
> faire cela de manière automatique, alors existe t il une solution avec
> sed ou s en perl pour demander le remplacement de tout caractère en
> majuscule en une minuscule ?



Et si tu renommais plutôt les images?



-- 
Charles



Re: sed et substitution de majuscules

2004-05-28 Par sujet Manuel VACELET

Thomas Nemeth wrote:


Ce n'est _pas_ une bonne idée, ÀMHA.
Dans ce cas tu vas transformer *tout* le texte en minuscules.
Je suppose que dans un fichier HTML, il n'y a pas que des liens
avec des noms de fichiers en majuscules : il doit y avoir du
texte normal...

Oui,
Il ne s'agit que d'une piste, pour illustrer l'utilisation de tr. J'ai 
oublié de le préciser.



--
# VACELET Manuelmanuel.vacelet(at)st(dot)com #
# STMicroelectronics  - Central R&D DAIS #
# 850, rue Jean Monet - 38926 CROLLES CEDEX - FRANCE #



Re: sed et substitution de majuscules

2004-05-28 Par sujet Thomas Nemeth
Le 28.05.04, Manuel VACELET a tapoté :

| Jean-Michel OLTRA wrote:
| > En shellscript utiliser tr
| >
| for fichier in `find . -name *.htm?`; do
| cp $fichier $fichier.old
| cat $fichier.old | tr 'A-Z' 'a-z' > $fichier
| done

Ce n'est _pas_ une bonne idée, ÀMHA.
Dans ce cas tu vas transformer *tout* le texte en minuscules.
Je suppose que dans un fichier HTML, il n'y a pas que des liens
avec des noms de fichiers en majuscules : il doit y avoir du
texte normal...


Thomas
-- 
> les débilos qui ont décrété  qu'il fallait  tout éteindre pendant le w.e.!!
define(`Y2K_Auto_Purge_Queue',`True')dnl
define(`Y2K_Auto_Murge_Admin',`True')dnl
   -+- fyr in Guide de l'admin pervers - "Ne pas gâcher son nouvel an" -+-



Re: sed et substitution de majuscules

2004-05-28 Par sujet Manuel VACELET

Jean-Michel OLTRA wrote:

En shellscript utiliser tr


for fichier in `find . -name *.htm?`; do
cp $fichier $fichier.old
cat $fichier.old | tr 'A-Z' 'a-z' > $fichier
done
--
# VACELET Manuelmanuel.vacelet(at)st(dot)com #
# Tel:  042 6089  +33 (0)476 92 6089 #
# STMicroelectronics  - Central R&D DAIS #
# 850, rue Jean Monet - 38926 CROLLES CEDEX - FRANCE #



Re: sed et substitution de majuscules

2004-05-28 Par sujet Jean-Michel OLTRA

bonjour,


Le vendredi 28 mai 2004, [EMAIL PROTECTED] a écrit...


> A la place d'éditer chaque fichier html a la mimine et y passer bon
> nombres d'heures, j'ai pensé à un script bash ou perl qui pourrait
> faire cela de manière automatique, alors existe t il une solution avec
> sed ou s en perl pour demander le remplacement de tout caractère en
> majuscule en une minuscule ?

Quelques pistes si tu désires t'y coller:

En python utiliser string.lower()
Avec awk utiliser tolower()
En shellscript utiliser tr

-- 
jm



Re: sed et substitution de majuscules

2004-05-28 Par sujet Patrice KARATCHENTZEFF

[EMAIL PROTECTED] wrote:

Bonjour,

Voila le pb, je dois mettre en ligne un site web mais j'ai tout un tas de page 
web htlm qui appellent des
fichiers images en majuscules alors qu'il sont stockés en minuscules
sur le serveur.

A la place d'éditer chaque fichier html a la mimine et y passer bon
nombres d'heures, j'ai pensé à un script bash ou perl qui pourrait
faire cela de manière automatique, alors existe t il une solution avec
sed ou s en perl pour demander le remplacement de tout caractère en
majuscule en une minuscule ?


$ perldoc -f uc

PK

--
Patrice KARATCHENTZEFF
STMicroelectronics   Tel:  04-76-92-67-96
850, rue Jean Monnet
38926 CROLLES Cedex,  Courriel: [EMAIL PROTECTED]