Commandes DOS - Win 10 - Windows & Software
Marsh Posté le 09-07-2021 à 12:45:40
Bonjour,
Comme ceci avec sed :
sed -n '15278,15377p;15377q' fichier1 >> fichier2 |
"-n <line1>,<line2>p" permet de ne garder que les lignes dans l'intervalle défini
"<line2>q" est une optimisation qui indique à sed de s'arrêter là et de ne pas continuer à lire le fichier; utile en cas de fichier lourd
Marsh Posté le 09-07-2021 à 13:00:23
Merci à vous 2.
Ce qui marche :
sed -n 15278,15377p;15377q fichier1 >> fichier2
Très bonne idée de me proposer l'optimisation avec l'option q car je travaille effectivement sur de gros fichiers.
Marsh Posté le 09-07-2021 à 13:13:32
Question bonus :
C'est possible de mentionner plusieurs intervalles en une seule ligne de commande ?
ex : je voudrais que mon fichier2 contiennent aussi les lignes 100 à 300 avant les lignes 15278 à 15377
Marsh Posté le 09-07-2021 à 13:19:54
sed -n 100,300p;15278,15377p;15377q fichier1 >> fichier2 |
?
Marsh Posté le 09-07-2021 à 13:28:19
Nickel
J'avais essayé mais ça avait planté car j'avais du faire une erreur
Marsh Posté le 12-07-2021 à 10:52:58
Bonjour
Maintenant que j'ai bien isolé toutes les parties du code qui m'intéressaient dans des fichiers séparés, je veux faire des substitutions de texte.
Mes fichiers ont beaucoup diminué en volume (au moins divisé par 3) mais certains sont encore très gros.
Je cherche maintenant à remplacer certaines lignes commençant par "MOT" par des ; dans les fichiers source.
Je sais que mes lignes à remplacer sont forcément dans les 1000 premières lignes des fichiers.
Voici ce que j'ai essayé :
sed s/MOT.*/;/;1000q *.txt
J'ai seulement le résultat à l'écran. Le remplacement ne se fait pas dans chaque fichier source.
Auriez-vous une solution ?
Marsh Posté le 12-07-2021 à 11:05:34
C’est pas "-i" pour le remplacement in place ?
Marsh Posté le 12-07-2021 à 11:17:01
-i fonctionne bien pour le remplacement dans le fichier
Je ne peux cependant pas exploiter la notion de "1000 premières lignes".
sed -i s/MOT.*/;/;1000q *.txt
Le nouveau fichier modifié ayant le nom de l'ancien ne contient alors que les 1000 premières lignes.
Marsh Posté le 12-07-2021 à 11:19:09
Si je ne peux pas exploiter la notion de "n premières lignes", une autre piste pourrait être le nombre de changements à faire.
Je sais que ces remplacements sont à faire maximum 30 fois en fonction des fichiers.
Marsh Posté le 09-07-2021 à 12:00:35
Bonjour
Ma question va vous paraître certainement "con" mais je n'arrive pas à trouver la solution.
J'ai un fichier de commandes SQL où je cherche à isoler parmi les milliers de lignes un ordre particulier.
J'utilise d'invite de commande DOS pour ce boulot.
J'ai isolé le numéro de ligne qui m'intéresse via la commande findstr.
=> Numéro de ligne de début 15278
J'ai besoin des 100 lignes suivantes.
Je souhaite me créer un 2ème fichier SQL avec uniquement les lignes 15278 à 15377 du 1er fichier.
J'ai l'utilitaire sed.exe bien positionné dans mon répertoire de travail.
J'ai trouvé comment créer un nouveau fichier sans ces lignes en utilisant l'option d de SED.
sed 15278,15377d fichier1 >> fichier2
mais pas comment isoler ces lignes dans mon nouveau fichier (=garder uniquement la partie supprimée).
Il doit bien y avoir une option SED pour faire facilement cela.
La dernière chose tentée mais qui ne fonctionne pas.
sed -n 15278,15377r fichier1 >> fichier2
Merci d'avance pour votre aide.