Rechercher : dans
Par :

Sed awk

Dernière réponse le 20 déc 2007 à 08:44:02 reduuxx, le 12 déc 2007 à 21:33:36 
 Signaler ce message aux modérateurs

Bonjour,

j'ai un fichier texte de ce genre :

cinq1;Dupond;jean;jdupond;jdupond
cinq1;valjean,jean;jvaljean,jvaljean


cinq1 est une classe, ensuite nom; prennom, login et mot de passe, comme vous le voyez le login et le mot de passe sont identiques. Je veux pouvoir modifer le mot de passe d'une ligne, voila ce que j'ai fait :

cat /emplacement du fichier | grep jdupond | awk -F ";" '{ print $5}' | sed s/jdupond/pass/ > /fichier provisoire

mais la le fichier provisoire ne contient que pass.

merci de votre aide

reduuxx

PS : je voudrais rester dans du shell sans perl ou autre si c'est possible

Configuration: Linux
Firefox 2.0.0.10

Meilleures réponses pour « sed awk » dans :
Transformer des colonnes en lignes dans un fichier Voir Différents outils de Linux sont très doués pour travailler avec des lignes, mais pas avec des colonnes (c'est leur rôle) Sed, Awk, Grep, etc. Cependant, il peut arriver pour X raisons que vous ayez un fichier où les données sont à lire en...
Sed - Substitution VoirSubstitution Substitution basique Simple Globale Ciblée Substitution conditionnée Simplee Avancée Bloc Avancéé Substitution basique Simple - 1ère occurrence (de chaque ligne) rencontrée uniquement sed 's/la/LA/' fichier.txt
Sed - Supprimer une ou plusieurs lignes d'un fichier VoirSupprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
Sed - Introduction à SED - Part II VoirSED - The Stream EDitor - Part II Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"...

1

lami20j, le 12 déc 2007 à 21:48:35

Salut,

quoi, t'es allergique à Perl ;-DDDD ?!

lami20j@debserv:~/trash$ cat fichier
cinq1;Dupond;jean;jdupond;jdupond
cinq1;valjean,jean;jvaljean,jvaljean
lami20j@debserv:~/trash$ sed -r '1 s/(.*;)(.*)/\1pass/' fichier > temp
lami20j@debserv:~/trash$ cat temp
cinq1;Dupond;jean;jdupond;pass
cinq1;valjean,jean;jvaljean,jvaljean


lami20j

Répondre à lami20j

2

jipicy, le 12 déc 2007 à 23:12:32

Salut,

$ cat plop
cinq1;Dupond;jean;jdupond;jdupond
cinq1;valjean,jean;jvaljean,jvaljean
$ sed '/jdupond/ s//pass/2' plop
cinq1;Dupond;jean;jdupond;pass
cinq1;valjean,jean;jvaljean,jvaljean
$
;-))

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

Répondre à jipicy

3

dubcek, le 13 déc 2007 à 09:54:28

Hello
awk -F ";" '/jdupond/ { $5="pass" ; print $0 }' < /emplacement du fichier > /fichier provisoire

Répondre à dubcek

4

reduuxx, le 13 déc 2007 à 17:54:07

Merci de votre aide rapide, mais vos réponses ne me satisfont pas pleinement. Je pense n'avoir pas été assez clair. Le fichier pourrait être :

cinq1;jean;valjean;jvaljean;jvaljean
cinq1;cosette;tenardier;ctenard;ctenard
cinq1;louis;seize;lseize;toto

la commande pour laquelle je demande de l'aide sera contenue dans un script et devra me permettre de changer les mot de passe.

votre premiere proposition modifie toujours le premier mot de passe, si je met ctenard comme login, il me change celui de la premiere ligne.

La seconde modifie toujours la deuxieme occurance, mais parfois c'est la premiere et ça peut etre la 3eme ou quatriemme.

la troisieme me donne un fichier temporaire vide.

je pense que grace à vous on est pas loin mais j'ai encore besoin d'un peu d'aide.

merci

Reduuxx

Répondre à reduuxx

5

jipicy, le 13 déc 2007 à 18:08:40

Re-

Ben on a fait selon ce que tu demandais dans ton 1er post et en fonction de ce que tu avais fourni comme explications...

Bon pour faire ce que tu veux, il suffit de modifier un peu la syntaxe de "lami20j" (au choix):

sed -r '/ctenard/ s/(.*;).*/\1pass/' fichier > temp
sed -r '/tenardier/ s/(.*;).*/\1pass/' fichier > temp
sed -r '/cosette/ s/(.*;).*/\1pass/' fichier > temp
sed -r '2 s/(.*;).*/\1pass/' fichier > temp
;-))

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

Répondre à jipicy

6

reduuxx, le 18 déc 2007 à 19:43:22

Merci pour l'aide,

il ne me reste qu'une petite amélioration.

sed -r '/ctenard/ s/(.*;).*/\1pass/' fichier > temp

ceci fonctionne mais comment inclure des variables aux lieu et place de ctenard et pass ?

en mettant respectivement $login et $pass, le script ne fonctionne plus (je suis sur de mes variables car d'autres parties de mon script y font appel et fonctionnent)

encore merci

Reduuxx

Répondre à reduuxx

7

lami20j, le 18 déc 2007 à 20:00:13

Salut,

lami20j@debserv:~/trash$ cat fichier
cinq1;Dupond;jean;jdupond;jdupond
cinq1;valjean,jean;jvaljean,jvaljean
lami20j@debserv:~/trash$ user=jdupond
lami20j@debserv:~/trash$ password=pass
lami20j@debserv:~/trash$ sed -r "/$user/ s/(.*;).*/\1$password/" fichier > temp
lami20j@debserv:~/trash$ cat fichier
cinq1;Dupond;jean;jdupond;jdupond
cinq1;valjean,jean;jvaljean,jvaljean
lami20j@debserv:~/trash$ cat temp
cinq1;Dupond;jean;jdupond;pass
cinq1;valjean,jean;jvaljean,jvaljean
lami20j@debserv:~/trash$


lami20j

Répondre à lami20j

9

jipicy, le 18 déc 2007 à 20:02:26

;-))

Z'@+...che.

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

Répondre à jipicy

8

jipicy, le 18 déc 2007 à 20:01:21

Alors au choix, soit tu double-quote l'expression entière :

sed -r "/$ctenard/ s/(.*;).*/\1$pass/" fichier > temp
soit avec des quotes simples :
sed -r '/'"$ctenard"'/ s/(.*;).*/\1'"$pass"'/' fichier > temp
;-))

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

Répondre à jipicy

10

 reduuxx, le 20 déc 2007 à 08:44:02

Bonjour

gràce à votre aide plus de soucis.

Si j'osais, je demanderai juste une dernière chose :

pourriez vous expliciter les diférents éléments qui composent cette ligne de commande sed car j'avou ne pas tout saisir.

Je ne sais pas comment mettre résolu mais si quelqu'un veut le faire, allez y.

ENCORE MERCI

Reduuxx

Répondre à reduuxx