Modifier une phrase dans un fichier txt

pseudoanonyme -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je voudrais savoir comment, de A à Z, faire pour modifier la même ligne dans un très grand nombre de fichiers texte.
J' explique:
J'ai une liste de fichier qui s'appelle 09400_001.par
09400_002.par
09400_003.par
etc...
(les .par s'ouvre avec le bloc note et l'invite de commande DOS les gère comme un fichier texte)
Ils contiennent tous à peu près le même texte,
.GLOBAL
$DATE 15-06-2009
$TIME 14:44:32
$DESCR OPK -> DVP ...
$TYPE OPK
$FSCALE00 3.33330000000000e+004
$FILE00 B:\annuel_2009\photos_30cm\Q09400_012.tif
$VERSION 5.5
.DESCR
.INTERIOR

Je voudrais supprimer la partie en gras et la remplacer par un espace et ce pour chacun de mes fichiers .par

Merci d'avance et bonne journée
A voir également:

17 réponses

heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
Salut,


Je suppose que tu veux remplacer ' B:\annuel_2009\photos_30cm\' par un seul blanc ? Ça limite les possibilités aux deux suivantes:

- Il suffit de recopier le fichier à l'identique pour toutes les autres lignes, et pour la ligne concernée pa la ligne modifiée.

- Ou alors, ouvrir le fichier, positionner le pointeur de fichier au début de la ligne concernée et l'écraser par la nouvelle ligne modifiée, puis continuer en recopiant à la suite les lignes restantes et refermer le fichier.

Il est très facile de faire ceci en Python que j'utilise.
0
pseudoanonyme
 
premièrement, Merci de ta réponse.
Je suis très heureux que tu me dise que c'est facile... mais peut-être vois-tu ma question se pointer à l'horizon...
Comment? ;D

pour ce qui est de tes deux choix, j'oppterais pour le premier; plus de sécurité?
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
il faudrait déjà savoir si tu es disposé à installer Python sur ton ordinateur, ne serait- ce que temporairement le temps de faire la manip que tu vises.

Parce que s'il y a des applications qui sont envisageables sur une autre machine, avec la seule obligation de transmettre un fichier, une fois terminé, c'est possible de ne pas installer Python.

Mais dans ton cas, il faudrait que tu fasses les opérations toi-même dans ton ordinateur avec un code présent dans ton ordinateur.



Es-tu sous Linux ou Windows ?
Je suis sous Windows et l'installation est très rapide.
Pour Linux , je n'ai pas l'expérience en propre, mais ce ne devrait pas être plus problématique.



le site est là:
https://www.python.org/
Il te suffirait d'installer la version 2.6



Après ce serait quelque chose du genre

f = open('fichier.txt','r')
g = open('fichier 2.txt','w')
for ligne in f:
      
      if 'B:\annuel_2009\photos_30cm' in ligne:
            g.write(ligne.replace('B:\annuel_2009\photos_30cm',' '))
      else:
            g.write(ligne)
f.close()
g.close()


C'est dur , hein ?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
et avec sed
C:> type f1.txt
.GLOBAL
$DATE 15-06-2009
$TIME 14:44:32
$DESCR OPK -> DVP ...
$TYPE OPK
$FSCALE00 3.33330000000000e+004
$FILE00 B:\annuel_2009\photos_30cm\Q09400_012.tif
$VERSION 5.5
.DESCR
.INTERIOR

C:> sed -i  "s/B:\\annuel_2009\\photos_30cm\\/ /" f1.txt

C:> type f1.txt
.GLOBAL
$DATE 15-06-2009
$TIME 14:44:32
$DESCR OPK -> DVP ...
$TYPE OPK
$FSCALE00 3.33330000000000e+004
$FILE00  Q09400_012.tif
$VERSION 5.5
.DESCR
.INTERIOR

https://forums.commentcamarche.net/forum/affich-37620020-sed-introduction-a-sed-part-ii#windows
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
Intéressant, dubcek.

Je connaissais l'existence de sed mais pas plus que ça
J'aimerais en savoir plus

Peux tu me dire si je comprends bien:

sed est un programme présent dans un système d'exploitation, c'est à dire que sont codage est inclus dans celui d'un système d'exploitation ?
D'après l'article de Wikipedia sur sed, il est disponible dans pratiquement tous les OS : Windows,Linux,Mac,etc.
Donc, il n'y a besoin d'aucun langage de programmation sur un ordinateur pour utiliser sed.
C'est bien ça ?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
à l'origine, il vient d'Unix, mais il est largement disponible sur d'autre platformes. Sa force est de pouvoir faire des modifs. simples ou très complexes.
Quasiment tout les outils Unix (sed, awk, etc) sont disponibles sous DOS sous forme d'un .exe, il n'y a donc rien à compiler, on copie le .exe dans Windows et hop
il y a un grand tutorial avec de nombreux exemples là https://forums.commentcamarche.net/forum/affich-37620084-sed-introduction-a-sed-part-i
0
fiu
 
salut
pour les grosses faignasses de mon genre, il existe gsar.exe (Global Search And Replace) qui fait ce que tu cherches (pas forcément aussi pratiquement que prétendu).
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
J'aimerais savoir quelle action concrète fait l'instruction
sed -i "s/B:\\annuel_2009\\photos_30cm\\/ /" f1.txt

Est-ce que sed lit les lignes les unes après les autres en recherchant la succession de bits qui constitue la chaîne B:\\annuel_2009\\photos_30cm , revient en arrière quand il l'a trouvée pour se positionner au début de cette succession, inscrit des bits (un octet sans doute) exprimant un espace, puis recopie à la suite de ce blanc la suite des bits se trouvant après ceux qui exprimaient la chaîne remplacée (donc avec un décalage vers le début du fichier)?

Ou bien lit-il et recopie-t-il toutes les lignes du fichier à un autre emplacement , en remplaçant simplement la succession de bits exprimant la chaîne par les bits d'un blanc lorsqu'il rencontre la ligne concernée ?

Ou encore lit-il et recopie-t-il au même emplacement en faisant la même chose. La différence avec les précédents cas étant qu'il lit chaque ligne et la recopie, soit inchangée soit changée, à patir de la même position que celle du début de la ligne lue ?
Alors que dans le premier cas, il ne recopie pas les premières lignes, il ne fait que les lire pour avancer jusqu'à celle qui doit être modifiée,
et que dans le deuxième cas il recopie les lignes ailleurs sans se préoccuper de revenir au début de chaque ligne lue pour la recopier.





D'autre part, dans la page dont tu donnes le lien, je lis:

Quand ne dois-je pas utiliser Sed ?
Quand des outils spécifiques existent déjà et effectuent la tâche plus rapidement et plus simplement, (syntaxiquement parlant).
(....)
Exclusion de motif simple
grep -v "motif" fichier # sed "/motif/!d' fichier

On peut aussi utiliser cette commande avec grep pour faire la même opération, n'est ce pas ?

EDIT
Merci pour la réponse précédente, je ne l'ai vue qu'après avoir posté
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
sed -i "s/B:\\annuel_2009\\photos_30cm\\/ /" f1.txt

sed ne traite que du texte, donc il travaille par ligne
-i sauve les modifs. dans le fichier original (f1.txt), sans le -i les résultats sont affichés, donc avec > je peux les copier dans un nouveau fichier, avec -i.old il crée une copie du fichier original avec l'extension .old
s/ancien/nouveau/ s pour substitue, remplace ancien par nouveau sur chaque ligne
j'ai ajouté des \\ parce que le \ sert de protection our des caractères spéciaux dans sed
on peut utiliser plusieurs commandes (grep ou sed ou awk, par ex.) pour faire la même chose. il faut choisir celle qu'on maitrise le mieux ou toutes les apprendre :-)
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
Je comprends ce que tu as écrit ainsi:


sed "s/ancien/nouveau/" f1.txt
ne fait qu'afficher le fichier modifié

sed "s/ancien/nouveau/" f1.txt > f1nouveau.txt
recopie le fichier modifié dans un nouveau fichier avec un autre nom

sed -i "s/ancien/nouveau/" f1.txt
modifie le fichier original, "sur place"

sed -i.old "s/ancien/nouveau/" f1.txt
recopie le fichier modifié dans un nouveau fichier ayant le même nom et renomme l'ancien fichier avec l'extension .old




Il y a quelque chose qui m'échappe avec ceci que tu as écrit
Quasiment tout les outils Unix (sed, awk, etc) sont disponibles sous DOS sous forme d'un .exe, il n'y a donc rien à compiler, on copie le .exe dans Windows et hop


Je m'attendais donc à pouvoir utiliser sed en ouvrant la console DOS par:
Démarrer / programmes / Accessoires / Command Prompt


mais j'ai le message d'erreur
'sed' is not recognized as an internal or external command, operable program or batch file




D'autre part, je ne comprends pas ce que signifie
copier le .exe dans Windows




Merci pour tes explications.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
sed ne fait pas partie de Windows, il faut donc le télécharger (voir le lien plus haut) et mettre le .exe dans le dossier où on travaille ou dans un dossier qui est dans le Path (echo %Path%)
j'ajouterais que cette version, à la différence des précédentes a besoin de librairies
C:> dir
...
14/03/2008  23:21         1 008 128 libiconv2.dll
06/05/2005  21:52           103 424 libintl3.dll
24/10/2007  12:10            79 360 regex2.dll
07/06/2009  08:59            94 720 sed.exe
...
C:>C:> dir | sed -n /sed.exe/p
07/06/2009  08:59            94 720 sed.exe

C:> sed --version
GNU sed version 4.2
.......
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
Ah je crois que j'ai compris.

Quand tu dis que sed est disponible sous DOS, tu veux dire que, ayant originellement été écrit pour des systèmes d'exploitation UNIX, il a ensuite été écrit dans une version utilisable sous DOS, et non pas qu'il est une partie constitutive de DOS. C'était ambigu.

Ton intervention m'a fait voir le grand intérêt de sed, je vais m'y intéresser de près. Pour certains traitements de fichier , il est suffisant et meilleur qu'un programme écrit dans n'importe wul langage de programmation.

Merci pour tes réponses.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Voir aussi les GNU utilities for Win32

;-))
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
Salut jipicy,


Merci pour le lien.

Il mène à une page qui a d'abord été bien mystérieuse pour moi.

Mais en faisant des recherches sur le net, je finis par comprendre que le monde Unix (ou seulement Linux ?) dispose d'outils performants en ligne de commande que n'ont pas les OS Windows. De ce fait, des adaptations des outils unixiens ont été faites pour les pauvres windowsiens




Je me suis demandé comment on parvenait à cette page quand on n'a pas le lien que tu donnes.
En googlant «gnu utilities for win32» j'ai trouvé les sites suivant

http://aziraphale.org/index.php/2005/02/16/46-kit-de-survie-du-linuxien-lache-en-milieu-hostile
qui donne le même lien que toi

https://www.cyberciti.biz/tips/download-gnu-utilities-for-windows.html
qui, lui, signale que ce lien est oudated
En fait ton lien conduit bien à une page, mais elle n'a pas été mise à jour depuis 14-04-03 ( mais 30-04-04 d'après une note en bas de page)
Ce site donne à la place le lien
http://gnuwin32.sourceforge.net/



Tout ça est bien intéressant.
Merci pour ta suggestion initiale
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
dans GNU utilities for Win32 le lien http://unxutils.sourceforge.net pointe sur la page qui permet de télécharger UnixUtils.zip. Mais la version de sed qu'on y trouve est ancienne (3.02) et ne connait pas, entre autre, la très utile option -i, par contre on trouve la plupart des outils de manipulation de texte Unix : gawk, cut, grep, diff, etc
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
Salut,


Dans la page
http://unxutils.sourceforge.net/



1) sous le lien UnxUtils.zip
qui est censé permettre le téléchargement par http,
il y a l'adresse
http://unxutils.sourceforge.net/UnxUtils.zip
Ce lien n'est plus valide, car quand je clique dessus, j'obtiens:

An error has been encountered in accessing this page. 

1. Server: unxutils.sourceforge.net 
2. URL path: /UnxUtils.zip 
3. Error notes: NONE 
4. Error type: 403 
5. Request method: GET 
6. Request query string: NONE 
7. Time: 2009-11-27 11:38:15 UTC (1259321895) 

Reporting this problem: The problem you have encountered is with a project web site hosted by SourceForge.net. This issue should be reported to the SourceForge.net-hosted project (not to SourceForge.net). 

(...) 





2) sous le lien
http://unxutils.sourceforge.net
qui n'est rien d'autre que l'adresse de la page dans laquelle il se trouve (!)
il y a l'adresse
https://sourceforge.net/projects/unxutils/

Quand je clique dessus, j'obtiens une page à laquelle je n'avais pas fait assez attention, parce qu'elle s'affiche mal dans mon navigateur (je suis avec Windows 2000 et le gestion des trucs les plus récents dans les pages web actuelles, il n'y arrive pas).

Enfin bref, cette fois-ci j'ai actionné le bouton
    Download Now !
    UnxUtils.zip (3.4 MB)


Mais après téléchargement, le dézipage a échoué. Message d'erreur:
...\Temporary Internet Files\ContentIE5\KLQ3WLAB\UnxUtils,Src[1].zip is not a valid Win32 application.


Pourquoi cette erreur ?

En cliquant sur le bouton
View all files
qui est à coté,
il apparaît les noms de fichier
UnxUtils.Src.zip  38.6 MB 
UnxUtils.zip   3.4.MB

Si j'essaye de télécharger et installé le premier, j'ai le même message d'erreur.

À quoi correspondent ces deux fichiers ?

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

D'autre part, j'ai trouvé plein de pages consacrées à sed, avec des numéros de versions divers à en donner le tournis. J'en resors sans savoir à quelle version s'attacher


http://gnuwin32.sourceforge.net/oldnews.html
5 July 2007: Sed-4.1.5



http://sed.sourceforge.net/
r  + GNU sed v4.x source code by Paolo Bonzini
r  + GNU sed v3.02.80 source code by Ken Pizzini
r  + GNU sed v3.02.80 for Linux (RPM)
r  + GNU sed v3.02.80 for OS2
r  + GNU sed v3.02.80 for Windows (3x, 9x, NT, 2K)
r  + GNU sed v3.02 for HPUX
r  + HHsed v1.5 source code (Turbo C) by Howard Helman
r  + HHsed v1.5 for MS-DOS by Howard Helman
r  + HHsed v1.5 for Windows by Howard Helman
r  + super sed v3.60 source code by Paolo Bonzini
r  + super sed v3.59 for Windows by Paolo Bonzini
r  + Complete list of available versions by Eric Pement



http://sed.sourceforge.net/sedfaq2.html#s2.2
toutes les versions décrites pour toutes les plateformes


http://sed.sourceforge.net/grabbag/ssed/
Super-sed is a heavily enhanced version of sed that I wrote. The current version is 3.62. The win32 executable has been kindly provided by Laurent Vogel; it does not require any support library. You can download it from here as:

Source code in .tar.gz format (835k) 
Binary Win32 executable, zipped (43k) 
Updated 11 Feb 2005
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
le fichier .src contient le code source
quand je clique Download now depuis https://sourceforge.net/projects/unxutils/files/ j'ai un fichier zip de 3.4 Mb que je peux extraire sans problème avec le zip Windows ou 7-zip, il contient
bin Dossier de fichiers 0 Ko 0 Ko 0% 13/11/2001 02:01
usr Dossier de fichiers 0 Ko 0 Ko 0% 13/11/2001 02:01
StdDisclaimer.html Firefox Document 1 Ko Non 2 Ko 39% 21/12/2001 14:51
UnxUtilsDist.html Firefox Document 6 Ko Non 26 Ko 79% 15/04/2003 12:47

pour ce qui est des versions, préferrer la plus récente, en tout cas 4.x
je ne connais pas ssed
0