Rechercher : dans
Par :

Script shell unix pour modifier un fichier

Dernière réponse le 24 mai 2008 à 02:03:38 fab, le 15 déc 2006 à 12:12:18 
 Signaler ce message aux modérateurs

Script shell unix pour modifier un fichier
Bonjour,
je cherche comment écrire un script shell pour modifier un fichier; en gros mon fichier source ressemble à:
entête
ligne 1
ligne 2
...
Et moi je voudrais obtenir un nouveau fichier avec:
entête ligne 1
entête ligne 2
...

merci de votre aide

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Script shell unix pour modifier un fichier » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha-Bang Premièrement,...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
UNIX - Les fichiers VoirIntroduction aux fichiers Unix Sous les systèmes UNIX tout élément est représenté sous forme de fichier. L'ensemble des fichiers est architecturé autour d'une unique arborescence dont la base, appelée racine, est notée «/». Types de...

1

jisisv, le 15 déc 2006 à 12:50:53

Avec perl

johan@johan:~/src/perl$ cat entete.pl
#!/usr/bin/perl -w
$entete=<>;
chomp($entete);
while(<>)
{
        print $entete. ' '. $_;
}
johan@johan:~/src/perl$ ./entete.pl entete.pl
#!/usr/bin/perl -w $entete=<>;
#!/usr/bin/perl -w chomp($entete);
#!/usr/bin/perl -w while(<>)
#!/usr/bin/perl -w {
#!/usr/bin/perl -w      print $entete. ' '. $_;
#!/usr/bin/perl -w }


Johan Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)

Répondre à jisisv

2

jipicy, le 15 déc 2006 à 16:32:10

Salut,

sed -i "1d;s/.*/entête &/" fichier
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

3

fab, le 15 déc 2006 à 16:54:59

Merci jp !
par contre comment je dis que entete c'est la 1ere ligne du fichier ?
(tu l'auras deviné, je suis pas balaize en sed ;-))

Répondre à fab

4

lami20j, le 15 déc 2006 à 20:34:28
  • +1

Salut,

voilà avec perl en ligne de commande
dans ce cas je préfère quand même la version de jipicy (en plus c'est shell qui est demandé, même pas sed :-DDD )
on peut dire merci aussi à jisisv pour sa solution

ma solution s'en fiche de ce qu'il y a écrit en entête
il lit la 1ère ligne quelque soit son contenu
le fichier d'origine ne change pas
je stocke le résultat dans le fichier resultat

perl -ne '/(.*)/ if 1..1;print"$1 $_"if 2..eof' fichier > resultat
--
lami20j

Répondre à lami20j

5

jipicy, le 15 déc 2006 à 21:41:04

Re-

Je suis pas sûr d'avoir tout compris là ;-\
Ce que je comprends c'est que tu ne sais pas ce qui se trouve dans la première ligne de ton fichier ? Si c'est ça alors :

var=$(sed -n 1p fichier.txt) && sed '1d;s/.*/'$var' &/' fichier.txt
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

7

lami20j, le 16 déc 2006 à 10:36:20

Salut,

tu n'a pas oublié l'option -i pour la modification sur place?! lami20j

Répondre à lami20j

8

jipicy, le 16 déc 2006 à 10:50:58

Salut,

Oui et non ;-))

Disons que quand je fais mes essais je ne l'utilise pas toujours, et donc quand je copie/colle ma ligne de commande, elle y est ou elle n'y est pas ;-))

Merci de l'avoir souligné ;-)
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

9

fab, le 18 déc 2006 à 10:15:39

Merci ! c'est exactement ce dont j'avais besoin !

Répondre à fab

10

fab, le 19 déc 2006 à 19:04:43

Une dernière chose les gars !? 2 en fait ;-)
1.après l'entête sur chaque ligne s'ajoute un caractère ^M; comment faire pour le virer ?
2. pkoi j'arrive pas à mettre cette mm ligne de commande dans un shell ? (avec $1 comme nom de fichier)
merci
a+

Répondre à fab

11

jipicy, le 19 déc 2006 à 20:28:20

Salut,

1 - Le ^M ([CTRL+V] + [CTRL+M]) est la représentation du retour chariot sous Windows. Pour le virer il suffit de faire (en tapant les caractères comme signifié ci-dessus) :

sed 's/^M$//' fichier
2 - Affiche nous ton script qu'on essaie de voir ce qui cloche.

;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

15

Dieng, le 22 mai 2007 à 09:51:46

Bonjour,

Je doit réaliser un script qui me lit des informations sur deux fichiers différents pour les concaténer ensuite dans un troisième fichier.
Mon problème est que je dois extraire une adresse Mac du premier fichier et il est de la forme: 0-12-3F-BD-50-21

Pour ensuite l'utiliser dans le deuxième fichier afin d'extraire l'adresse IP correpondant: sauf que dans le deuxième fichier ce même adresse MAC est de la forme: 00:12:3f:bd:50:21

Il me faut dont une commande pour transformer les"-" en":" , les"majuscule" en "minuscule" et aussi ajouter un zero devant.

Merçi.

Répondre à Dieng

16

jipicy, le 22 mai 2007 à 10:08:36

Salut,

$ echo $var
0-12-3F-BD-50-21

$ echo $var | tr 'A-Z' 'a-z' | sed 's/-/:/g;s/.*/0&/'
00:12:3f:bd:50:21
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

17

 Dieng, le 22 mai 2007 à 15:58:04

Merçi,

ça marche.

thanks you very much!!!!!

Répondre à Dieng

12

fab, le 20 déc 2006 à 16:29:37

Salut jipicy,
2. c'est bon, j'ai vu, ça marche
1. ben y'a tjs des ^M dans le fichier après ta commande... !???

Répondre à fab

13

lami20j, le 20 déc 2006 à 16:36:43

Salut,

essaie

perl -pi.orig -e 's/\r//' fichier
--
lami20j

Répondre à lami20j

14

fab, le 20 déc 2006 à 16:53:57

Merci,
je l'ai fait avec dos2unix

Répondre à fab