Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/10/2007, à 15:28

KujakuChan

Edition de fichier dans le terminal

Bonjour,

je voudrais savoir comment procéder avec le terminal pour éditer les dernières lignes d'un fichier. Ce serait pour utilisation dans un script à but administratif.

Per exemple si dans mon fichier j'ai le contenu suivant :

1 Bonjour
2 Hello
3 Hola
4 Buen giorno
5 Guten tag
6 Dzien dobry
7 お早うございます
8 今日は
9 ニャー

Je voudrais éditer les 3 dernières lignes après choix d'une option dans un menu que j'ai réalisé dans mon script.

Donc par exemple ça donnerais

1) Voir le contenu du fichier
2) Editer les dernières lignes

Votre choix : 2

Combien de lignes éditer ? 3
...

A partir des ... on serait en train d'éditer mon fichier sur ses 3 dernières lignes...
Voilà merci d'avance... :)


自分の考え:ウィンドウズライナックスに対するのはデルフィC++に対するようなものである
Just a thought : Windows is to Linux as Delphi is to C++ . Juste une pensée : Windows est à Linux ce que Delphi est à C++.

Hors ligne

#2 Le 31/10/2007, à 16:33

anod1

Re : Edition de fichier dans le terminal

EDIT : en fait je crois que c'est une mauvaise piste... désolé...

peut etre en utilisant nano en mode restricted :
extrait du man :
-R (--restricted)
    Mode restreint : aucune lecture ou écriture de fichiers non indiqués sur la ligne de commande, ...

Dernière modification par anod1 (Le 31/10/2007, à 16:38)

Hors ligne

#3 Le 31/10/2007, à 16:48

Sorlingues

Re : Edition de fichier dans le terminal

Je me demande si tu n'aurais pas plus de chance dans le forum de programmation.

Connais-tu sed ? Je ne sais s'il peut t'aider car moi je n'ai jamais pris la peine de l'apprendre. Peut-être pourrait-il faire ce que tu veux, peut-être pas.

Sais-tu qu'en bash (au fait tu n'as pas précisé quel langage tu utilises dans ton script) il est possible de lire un fichier ligne par ligne. La syntaxe est du style

ligne="un truc non vide pour commencer"
until [ -z "$ligne" ]
do
read ligne
echo Voici la ligne lue : "$ligne"
done < le_fichier_a_lire

(le truc est dans la redirection après le done)

Sachant cela, moi je ferais comme ceci (mais je suis un gros amateur pour programmer et je me complique souvent la vie) :

Ajouter un compteur dans la boucle ci-dessus afin de compter les lignes. Les premières lignes seraient recopiées dans un fichier provisoire1 ; les dernières dans un fichier provisoire2 puis je lancerais un éditeur de texte (vim, nano...) pour modifier le fichier provisoire2. Quand l'édition est terminée je concatène provisoire1 et provisoire2 dans le fichier initial.

À mon avis ça marche mais...
1/ est-ce vraiment le plus simple ?
2/ pourquoi ne pas bêtement ouvrir un éditeur sur tout le fichier initial et laisser les gens naviguer jusqu'à la ligne souhaitée ? (vim peut être ouvert à une ligne donnée) Car si j'ai bien compris ta demande, tu veux proposer à l'utilisateur de n'éditer que les lignes demandées mais d'un autre côté il peut demander de quand même tout éditer. Enfin je suppose que tu as tes raisons.

Hors ligne

#4 Le 31/10/2007, à 16:59

seb0uil

Re : Edition de fichier dans le terminal

Salut,
si tu veux lire les n dernières lignes en script le plus simple est d'utiliser tail

$ cat test
1 Bonjour
2 Hello
3 Hola
4 Buen giorno
5 Guten tag
6 Dzien dobry
7 お早うございます
8 今日は
9 ニャー

$ tail -3 test
7 お早うございます
8 今日は
9 ニャー

$ tail -n +3 test
3 Hola
4 Buen giorno
5 Guten tag
6 Dzien dobry
7 お早うございます
8 今日は
9 ニャー

$ head -n +3 test
1 Bonjour
2 Hello
3 Hola

avec tail tu peux afficher les x dernieres lignes, de la ligne x à la fin.
Tu as head aussi qui t'affiches les lignes en partant du début jusqu'a la Nième...

edit:
J'edite, j'avais lu un peu vite et avait oublié la partie edition..
Donc tu peux avec ca couper ton fichier en 2, la partie initiale + la fin a editer, et recoller ensuite les 2 quand l'utilisateur a finit d'éditer les n dernieres lignes...

Mais est ce bien nécessaire ??

Dernière modification par seb0uil (Le 31/10/2007, à 17:01)


Java stuff ::
tPortal.. ma petite implémentation de la JSR168
jlibParam.. pooling, paramétrage etc...

Hors ligne

#5 Le 01/11/2007, à 01:06

KujakuChan

Re : Edition de fichier dans le terminal

Merci pour vos réponses.

Oui j'ai oublié de précisé qu'il s'agit d'intégrer ceci dans un script bourne shell ou bourne again shell (donc sh -au possible- ou bash)
head et tail je connais mais je ne crois pas pouvoir editer les données mais juste les afficher. C'est pas ce que je veut. Je connais un peu SED mais je vais regarder de plus pres. merci smile


自分の考え:ウィンドウズライナックスに対するのはデルフィC++に対するようなものである
Just a thought : Windows is to Linux as Delphi is to C++ . Juste une pensée : Windows est à Linux ce que Delphi est à C++.

Hors ligne

#6 Le 01/11/2007, à 01:47

HymnToLife

Re : Edition de fichier dans le terminal

C'est le marteau-pilon pour écraser une mouche, ton truc. Pourquoi les gens ne pourraient pas éditer le fichier directement ?


- Rodrigue, as-tu du cœur ?
- Non, mais j'ai du pique !

Hors ligne

#7 Le 02/11/2007, à 00:25

KujakuChan

Re : Edition de fichier dans le terminal

C'est un travail que j'ai à faire xD. C'est justement ce point qui me bloque. Sinon le reste ça devrait aller. smile


自分の考え:ウィンドウズライナックスに対するのはデルフィC++に対するようなものである
Just a thought : Windows is to Linux as Delphi is to C++ . Juste une pensée : Windows est à Linux ce que Delphi est à C++.

Hors ligne

#8 Le 02/11/2007, à 10:36

seb0uil

Re : Edition de fichier dans le terminal

KujakuChan a écrit :

head et tail je connais mais je ne crois pas pouvoir editer les données mais juste les afficher.

Oui, mais il est toujours possible de faire

head -n -3 test > fichier_debut
tail -3 test > fichier_fin
vi fichier_fin
cat fichier_debut fichier_fin > test

enfin, dans les grandes lignes, pour couper ton fichier en 2, editer la seconde partie, et recoller tout ca ...


Java stuff ::
tPortal.. ma petite implémentation de la JSR168
jlibParam.. pooling, paramétrage etc...

Hors ligne

#9 Le 02/11/2007, à 14:02

KujakuChan

Re : Edition de fichier dans le terminal

J'y avait un peu pensé au principe mais pas au codage. ^^
Je vais quand même regarder avec la commande sed mais je pense que votre méthode est la plus simple à mettre en oeuvre.
Merci je vous tiens au courant si nécessaire quand j'en serais à la réalisation de ce point là smile


自分の考え:ウィンドウズライナックスに対するのはデルフィC++に対するようなものである
Just a thought : Windows is to Linux as Delphi is to C++ . Juste une pensée : Windows est à Linux ce que Delphi est à C++.

Hors ligne