Comment faire un retour à la ligne dans un fichier texte sur un signe

Comment faire un retour à la ligne dans un fichier texte sur un signe - Linux et OS Alternatifs

Marsh Posté le 07-12-2002 à 01:20:42    

J'ai un fichier texte qui se présente sur une seule très longue ligne. J'aimerais qu'à chaque fois qu'il y a un [ , soit inséré un retour chariot. Quelle commande est capable de faire ça ?
 
Merci d'avance

Reply

Marsh Posté le 07-12-2002 à 01:20:42   

Reply

Marsh Posté le 07-12-2002 à 11:04:16    

qdm a écrit :

J'ai un fichier texte qui se présente sur une seule très longue ligne. J'aimerais qu'à chaque fois qu'il y a un [ , soit inséré un retour chariot. Quelle commande est capable de faire ça ?
 
Merci d'avance

fé-le en C...
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(int argc, char ** argv)
  4. {
  5. FILE * f1, f2;
  6. char* srcfile=argv[1];
  7. char* destfile=argv[2];
  8. char tmp;
  9. char insert='\n';
  10. if((f1=open(filename, O_RDONLY))==0)
  11. {
  12.  perror ("open" );
  13.  exit(-1);
  14. }
  15. if((f1=open(filename, O_WRONLY|O_CREAT|O_EXCL))==0)
  16. {
  17.  perror ("open" );
  18.  exit(-1);
  19. }
  20. while((tmp=read(f,&tmp,sizeof(char))!=0)
  21. {
  22.  write(f2,&tmp,sizeof(char));
  23.  if(tmp=='[')
  24.   write(f2,&insert,sizeof(char));
  25. }
  26. close(f1);
  27. close(f2);
  28. }

G tapé ce code à l'arrache, je ne suis pas certain qu'il fonctionne bien. Entr'autres, j'ai oublié de faire des tests sur les read et les write et il manque peut-être des includes. Tu compiles ton programme et tu mets en paramètre le nom du fichier à modifier puis le nom du fichier à écrire avec les modifications.
Tu peux le compiler avec la commande :
 

gcc -o retourchariot retourchariot.c

J'espère t'avoir aidé  :hello:


---------------
si t déçu d'être dessous, tu iras dessus kom ça tu seras plus déçu ni dessous... Si tu piges pas c ke t saoul, c sûr...
Reply

Marsh Posté le 07-12-2002 à 12:01:14    

pas la peine de le faire en C...
 
Sous vi, tapes en mode commande:
:1s/caractere/\n/g
 
1 c'est le numero de la ligne a copier...
 
Le \n je sais plus, c'est un caractere special, je cherche et je reposte...


Message édité par Sartene le 07-12-2002 à 12:03:56
Reply

Marsh Posté le 07-12-2002 à 12:08:15    

bon je trouve pas...
 
On peut utiliser awk ou sed evidemment pour ca:
 
sed -e 's/caractere/\n/g' fichier
 
Ca devrait marcher...

Reply

Marsh Posté le 07-12-2002 à 14:58:07    

Merci. Ceci dit le méchant me répond :
 
sed: -e expression #1, char 8: Unterminated `s' command

Reply

Marsh Posté le 07-12-2002 à 15:15:56    

qdm a écrit :

Merci. Ceci dit le méchant me répond :
 
sed: -e expression #1, char 8: Unterminated `s' command
 


 
As tu bien mis les bons quotes ' (touche 4 en clavier azerty) au debut et a la fin ?

Reply

Marsh Posté le 07-12-2002 à 15:16:43    

D'ailleurs essaie sans la -e, juste sed 's/caractere/\n/' fichier

Reply

Marsh Posté le 07-12-2002 à 15:20:12    

Ou encore avec tr:
tr "caractere" "\n" < fichier

Reply

Marsh Posté le 07-12-2002 à 16:43:39    

Avec sed ça ne marche toujours pas mais avec tr si. Il m'a sucré mes [ (en faisant le remplacement par [\n il refuse) mais c'est pas grave l'essentiel est fait.
 
Merci beaucoup  :hello:

Reply

Marsh Posté le 07-12-2002 à 16:57:52    

De rien...
 
le [ est peut etre interprete par tr, essaie au cas ou, en rajoutant le caractere d'ehappement avant:
 
tr "\[" "\[\n" fichier
 
ou un truc du genre...
 
 [:totoz6]

Reply

Sujets relatifs:

Leave a Replay

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