Modifier numéro du paragraphe en shell

Modifier numéro du paragraphe en shell - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 16-12-2017 à 17:09:55    

J'ai un peu merdé sur un fichier, du coup j'ai des débuts de ligne commençant par :
1.
2.
(...)
1.
ect.
 
Je voudrais qu'à chaque fois cela s'incrémente, j'ai tenté :

Code :
  1. #!/bin/bash
  2. for i in `seq 1 4835`;
  3. do
  4.  sed -e "s/\n<b>[0-9]+</b>[.]/\n<b>$i.</b>/$i" monfichier.txt
  5. done


Mais ça ne me donne rien, je ne sais pas vraiment où est le problème.

Reply

Marsh Posté le 16-12-2017 à 17:09:55   

Reply

Marsh Posté le 16-12-2017 à 20:06:28    

elimines la nuemrotation actuelle puis renumerote

-bash-4.4$ cat > titi                        
1. sdfdf
3. sdfdsf
11. sdfsdfsd
-bash-4.4$ sed 's/.*\. //' titi | cat -n > toto
-bash-4.4$ cat toto
     1  sdfdf
     2  sdfdsf
     3  sdfsdfsd
-bash-4.4$ rm t?t?
-bash-4.4$


 
 
sed 's/.*\. //' remplace tout ce qui est devant . suivi d'espace par rien ....  
enfin cat -n numérote redirigé vers un fichier de sortie ...   et hop

Reply

Marsh Posté le 16-12-2017 à 21:39:05    

francoisp31 a écrit :

elimines la nuemrotation actuelle puis renumerote

-bash-4.4$ cat > titi                      
1. sdfdf
3. sdfdsf
11. sdfsdfsd
-bash-4.4$ sed 's/.*\. //' titi | cat -n > toto
-bash-4.4$ cat toto
     1  sdfdf
     2  sdfdsf
     3  sdfsdfsd
-bash-4.4$ rm t?t?
-bash-4.4$

 


sed 's/.*\. //' remplace tout ce qui est devant . suivi d'espace par rien ....  
enfin cat -n numérote redirigé vers un fichier de sortie ...   et hop


Mais là il risque de me supprimer des lignes qui contiennent un point non ? Et numéroter chaque ligne aussi si j'ai bien compris ? Car certaines lignes en contient sans qu'elles soient ni doivent être précédées d'un numéro à changer, j'ai pas mal de ligne comme ça qu'il ne faut pas modifier pour autant, la seule valeurs sûre c'est même "plus complexe" que ce que j'ai donné (même si ça ne change pas grand chose), c'est : "<br/>\n<b>numéro</b>." à changer par : "<br/>\n<b>Nouveau numéro incrémenté.</b>". A la rigueur le point je m'en fou qu'il soit entre la balise bold même si ce n'est pas ce qui me pose problème là encore.


Message édité par phœnix le 16-12-2017 à 21:39:30
Reply

Marsh Posté le 17-12-2017 à 00:22:41    

tout à fait il faut juste effectivement que tu adaptes la regexp à tes besoins.

Reply

Marsh Posté le 17-12-2017 à 01:10:14    

Je comprend bien mais c'est ce que j'ai voulut faire comme vu ma tentative dans mon premier post mais je n'arrive pas à trouver la bonne formule. Je viens de tenter ainsi du coup :

Code :
  1. sed -e "s/<br\/>\n<b>[0-9]+</b>\./<br\/>\n<b>$i.</b>/$i" monfichier.htm


Mais pas plus de succès.

 

Une partie de ce que me ressort le terminal

Code :
  1. <b>2</b>. Mon texte.<br/>
  2. <b>3</b>. Mon texte (...)
 

Et tout le texte semble défiler comme s'il ne trouvait pas la première occurrence déjà.
Est-ce qu'on est d'accord déjà que dans ma formule le dernier /$i permet de lui dire de s'occuper seulement de la i nième occurrence ou est-ce que cette option est fausse ?

 

edit : Sans l'option -e c'est la même.


Message édité par phœnix le 17-12-2017 à 01:13:46
Reply

Marsh Posté le 18-12-2017 à 16:34:55    

Les quelques problème qu'il y avait :
1) La commande ne reconnaissait pas \n pour des raisons que j'ignore mais je me suis débrouillé autrement voir point 4.
2) Sur mon exemple j'avais oublié d'échapper quelques caractères.
3) L'option + pour dire : une à plusieurs répétition ne fonctionne pas, il faut faire [0-9][0-9]* du coup.
4) Le chiffre à la fin indique non pas la première occurrence du fichier mais de chaque ligne. Du coup j'ai remplacé les \n par un caractère non présent avec tr afin de faire un texte sur une seule ligne, j'ai lancé ma commande sed et j'ai du coup pût outrepasser le fait qu'il ne voulait pas reconnaître \n puis j'ai refait un coup de tr pour remettre les saut de ligne.
 
Il y a une autre solution directement par sed si j'ai bien compris mais je ne la comprenais pas donc j'ai préféré ainsi.

Reply

Marsh Posté le 29-01-2018 à 07:47:27    

Pour que le "+" fonctionne, il faut se mettre en expression régulière étendue, donc avec le switch -r de souvenir.
Sinon, tu pouvais également : sed -r "s/^ *[0-9]+ *\.//g"  
Le ^ veut dire que "ca commence par ..."


---------------
Burn the museum, wipe your ass with the Mona Lisa, this way, at least, God will know your name.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed