A voir également:
- [script bash] quelles commandes utiliser ?
- Utiliser chromecast - Guide
- Script vidéo youtube - Guide
- Invite de commandes - Guide
- Utiliser iphone comme webcam - Guide
- Comment utiliser l'ia - Accueil - Guide Intelligence artificielle
8 réponses
gbenay
Messages postés
61
Date d'inscription
jeudi 16 décembre 2004
Statut
Membre
Dernière intervention
3 mars 2006
11
14 mars 2005 à 11:54
14 mars 2005 à 11:54
Une autre solution consiste a utiliser "cut" qui permet de couper une ligne en morceau et de choisir le morceau qui convient.
On l'utilise après avoir récupérer la ligne qui t'interesse.
Il faut savoir quel separateur tu emploies entre "fichier_1" et "commentaire du fichier 1"
si c'est l'espace (un seul) on tape la ligne suivante
ceci signifie
dans la ligne qui contient "fichier_1" je prends tous les elements qui suivent le premier 'espace' (-f 2-)
dans le cas ou tu utilises la tabulation comme separateur tu n'as pas a definir le separateur
Un man cut t'aideras pour toutes les possibilités.
Bon courage.
On l'utilise après avoir récupérer la ligne qui t'interesse.
Il faut savoir quel separateur tu emploies entre "fichier_1" et "commentaire du fichier 1"
si c'est l'espace (un seul) on tape la ligne suivante
grep fichier_1 nom_du_fichier | cut -d ' ' -f 2-
ceci signifie
dans la ligne qui contient "fichier_1" je prends tous les elements qui suivent le premier 'espace' (-f 2-)
dans le cas ou tu utilises la tabulation comme separateur tu n'as pas a definir le separateur
grep fichier_1 nom_du_fichier | cut -f 2-
Un man cut t'aideras pour toutes les possibilités.
Bon courage.
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
5 février 2025
1 526
13 mars 2005 à 22:00
13 mars 2005 à 22:00
Tu as aussi l'option -o de grep qui te permet de ne selectionner que la partie qui concerne ton expression régulière.
Par exemple si tu vas dans /etc/init.d et que tu tapes grep -oE '#.*' *
tu auras les commentaires avec le nom du fichier correspondant à chaque occurence de ton expression...
Par exemple si tu vas dans /etc/init.d et que tu tapes grep -oE '#.*' *
tu auras les commentaires avec le nom du fichier correspondant à chaque occurence de ton expression...
gbenay
Messages postés
61
Date d'inscription
jeudi 16 décembre 2004
Statut
Membre
Dernière intervention
3 mars 2006
11
14 mars 2005 à 13:08
14 mars 2005 à 13:08
Salut,
J'avais pas lu toute la question, excuse-moi?
Et une fois que j'ai accédé au commentaire voulu, quelle commande permettrait de le modifier sans toucher au début de la ligne ni au reste du fichier texte ?
Pour repondre completement il me faut plusieurs parametres :
1/ ton commentaire doit-il etre juste modifie ou reecrit ?
2/ la ligne contenant l'information doit-elle etre toujours au meme endroit dans ton fichier?
3/ ton fichier est-il trier (apr exemple sur le nom des fichiers)?
Il faudra toujours passer par des recopies de fichier temporaire car sed ou tout autre commande (sauf les editeurs de texte) utilisent des fichiers en lecture ou en ecriture mais pas les 2. Si tu ne veux pas utiliser de fichier temporaire il faut construire un petit programme en C ou en Java (ou autre) qui puisse ouvrir le fichier en lecture-ecriture.
voici une possibilite si tu reecris completement le commentaire de fichier_1 (par exemple)
Tu peux creer un fichier script "s1.sh"
de ce genre
et alors il suffit d'ecrire apres avoir modifier en executable ce fichier script
J'avais pas lu toute la question, excuse-moi?
Et une fois que j'ai accédé au commentaire voulu, quelle commande permettrait de le modifier sans toucher au début de la ligne ni au reste du fichier texte ?
Pour repondre completement il me faut plusieurs parametres :
1/ ton commentaire doit-il etre juste modifie ou reecrit ?
2/ la ligne contenant l'information doit-elle etre toujours au meme endroit dans ton fichier?
3/ ton fichier est-il trier (apr exemple sur le nom des fichiers)?
Il faudra toujours passer par des recopies de fichier temporaire car sed ou tout autre commande (sauf les editeurs de texte) utilisent des fichiers en lecture ou en ecriture mais pas les 2. Si tu ne veux pas utiliser de fichier temporaire il faut construire un petit programme en C ou en Java (ou autre) qui puisse ouvrir le fichier en lecture-ecriture.
voici une possibilite si tu reecris completement le commentaire de fichier_1 (par exemple)
sed -e 's/fichier_1\(.*\)/fichier_1 nouveau_commentaire/' nom_fichier > nom_fichier.tmp rm nom_fichier mv nom_fichier.tmp nom_fichier
Tu peux creer un fichier script "s1.sh"
de ce genre
#! /bin/bash echo "s/$1\(.*\)/$1 $2/" > t1.tmp sed -f t1.tmp $3 > $3.tmp rm $3 mv $3.tmp $3 rm t1.tmp
et alors il suffit d'ecrire apres avoir modifier en executable ce fichier script
s1.sh fichier_1 nouveau_commentaire nom_fichier
Si tu veux donner plus de liberte il faut permettre d'utilser d'autres valeurs que $1 $2 $3 soit par des read soit par des valeurs figees.
Bon courage.
asevere
Messages postés
13089
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
23 novembre 2024
426
13 mars 2005 à 19:35
13 mars 2005 à 19:35
Salut,
Pour le traitement de ton fichier, je dirais sed (man sed) qui te permettra de trouver le commentaire voulu, et de le modifier sans toucher le reste du fichier.
Pour tester si un argument est bien un repertoire,
Pour compter le nombre de fichiers dans un repertoire, un ls |wc -w devrait faire l'affaire.
++
Pour le traitement de ton fichier, je dirais sed (man sed) qui te permettra de trouver le commentaire voulu, et de le modifier sans toucher le reste du fichier.
Pour tester si un argument est bien un repertoire,
if [ -d arg ]; then echo "C'est une repertoire" else echo "C'est pas un repertoire" fi;
Pour compter le nombre de fichiers dans un repertoire, un ls |wc -w devrait faire l'affaire.
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
asevere
Messages postés
13089
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
23 novembre 2024
426
14 mars 2005 à 14:24
14 mars 2005 à 14:24
ou tout simplement
#!/bin/sh
sed -ie 's/(fic_1 separateur)commentaire/\1nouveau_commentaire/'
Sans passer par un fichier temporaire en prenant soin de verifier que -i a bien le comportement souhaité.
#!/bin/sh
sed -ie 's/(fic_1 separateur)commentaire/\1nouveau_commentaire/'
Sans passer par un fichier temporaire en prenant soin de verifier que -i a bien le comportement souhaité.
"Pour repondre completement il me faut plusieurs parametres :
1/ ton commentaire doit-il etre juste modifie ou reecrit ? "
Les deux doivent être possibles. Le nom du fichier ne change pas, mais le commentaire doit pouvoir être changé complètement ou juste corrigé.
"2/ la ligne contenant l'information doit-elle etre toujours au meme endroit dans ton fichier?"
Je ne sais pas trop encore, je pense qu'une fois que la ligne sera insérée dans le fichier, elle ne changera plus de place
"3/ ton fichier est-il trier (apr exemple sur le nom des fichiers)? "
Il n'est pas trié, en fait je ne pensais pas que ce serait necessaire, mais je pourais le faire au besoin.
Et si possible, j'aimerais ne pas avoir à créer de fichiers temporaires.
J'aurais une autre question:
Mon fichier texte contient en début de chaque ligne le nom d'un fichier (ou sous-répertoire, je dois pouvoir leur associer un commentaire aussi) contenu dans le répertoire dans lequel il est placé, à partir du moment ou on veut lui attribuer un commentaire.
(imaginons un répertoire A contenant les fichiers 1,2,3 et 4 (peu importe le type de fichier), plus mon fichier texte. Si je veux commenter les fichiers 1, 2 et 3, je créerai une ligne dans mon fichier texte pour chaque fichier, avec son commentaire associé, j'aurai donc 3 lignes commençant par le nom de chaque fichier, et suivies du commentaire qui leur est associé. Je veux ensuite récuperer uniquement le commentaire associé au fichier (cf ma 1ère question)).
Ma nouvelle question est: je crée une nouvelle ligne pour chaque fichier que je veux commenter, jusque là ça va, mais comment faire lorsque je supprime le fichier du répertoire pour que la ligne correspondante soit effacé du fichier texte ?
J'imagine une commande 'ls' qui rechercherait tous les fichiers du repertoire, mais je ne sais pas comment faire pour supprimer une ligne du fichier texte si le fichier correspondant n'existe plus dans le répertoire.
1/ ton commentaire doit-il etre juste modifie ou reecrit ? "
Les deux doivent être possibles. Le nom du fichier ne change pas, mais le commentaire doit pouvoir être changé complètement ou juste corrigé.
"2/ la ligne contenant l'information doit-elle etre toujours au meme endroit dans ton fichier?"
Je ne sais pas trop encore, je pense qu'une fois que la ligne sera insérée dans le fichier, elle ne changera plus de place
"3/ ton fichier est-il trier (apr exemple sur le nom des fichiers)? "
Il n'est pas trié, en fait je ne pensais pas que ce serait necessaire, mais je pourais le faire au besoin.
Et si possible, j'aimerais ne pas avoir à créer de fichiers temporaires.
J'aurais une autre question:
Mon fichier texte contient en début de chaque ligne le nom d'un fichier (ou sous-répertoire, je dois pouvoir leur associer un commentaire aussi) contenu dans le répertoire dans lequel il est placé, à partir du moment ou on veut lui attribuer un commentaire.
(imaginons un répertoire A contenant les fichiers 1,2,3 et 4 (peu importe le type de fichier), plus mon fichier texte. Si je veux commenter les fichiers 1, 2 et 3, je créerai une ligne dans mon fichier texte pour chaque fichier, avec son commentaire associé, j'aurai donc 3 lignes commençant par le nom de chaque fichier, et suivies du commentaire qui leur est associé. Je veux ensuite récuperer uniquement le commentaire associé au fichier (cf ma 1ère question)).
Ma nouvelle question est: je crée une nouvelle ligne pour chaque fichier que je veux commenter, jusque là ça va, mais comment faire lorsque je supprime le fichier du répertoire pour que la ligne correspondante soit effacé du fichier texte ?
J'imagine une commande 'ls' qui rechercherait tous les fichiers du repertoire, mais je ne sais pas comment faire pour supprimer une ligne du fichier texte si le fichier correspondant n'existe plus dans le répertoire.
14 mars 2005 à 12:11
Oui effectivement, et on aurait pu aussi se servir de "awk", mais le problème c'est que, je cite :
Et une fois que j'ai accédé au commentaire voulu, quelle commande permettrait de le modifier sans toucher au début de la ligne ni au reste du fichier texte ?
Voilà pourquoi "asevere" parlait d'utiliser "sed", il faut pouvoir extraire le commentaire, le modifier et le remplacer sans toucher au reste...