Script remplacer ligne + champ
Résolu/Fermé
A voir également:
- Script remplacer ligne + champ
- Script vidéo youtube - Guide
- Remplacer disque dur par ssd - Guide
- Aller à la ligne excel - Guide
- Remplacer word - Guide
- Partager photos en ligne - Guide
18 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
7 juil. 2010 à 10:01
7 juil. 2010 à 10:01
Salut,
Tu n'as rien trouvé par toi même ? Ne serait-ce qu'une bribe ?
C'est un peu le même principe ;-\
Tu n'as rien trouvé par toi même ? Ne serait-ce qu'une bribe ?
C'est un peu le même principe ;-\
oui j'ai bien la solution pour insérer du texte après un mot clé, mais pas pour remplacer la ligne contenant le mot clé...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
7 juil. 2010 à 10:22
7 juil. 2010 à 10:22
alors j'ai réussi la 1ere partie consistant à remplacer une ligne par une autre (par l'intermediaire de 2 commandes sed, une qui insere ma ligne avant la ligne a supprimer, une qui supprime la ligne en question)
par contre concernant la 2eme partie...je coince !
voila mon besoin :
je voudrais également remplacer le 5eme champ de la ligne 2, de cette manière:
"1 2 3 4 5 6 7" devient "1 2 3 4 8 6 7"
par contre concernant la 2eme partie...je coince !
voila mon besoin :
je voudrais également remplacer le 5eme champ de la ligne 2, de cette manière:
"1 2 3 4 5 6 7" devient "1 2 3 4 8 6 7"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
7 juil. 2010 à 12:31
7 juil. 2010 à 12:31
par l'intermediaire de 2 commandes sed,
Avec une seule commande ça suffit amplement :
;-))
Avec une seule commande ça suffit amplement :
[tmpfs]$ cat plop
ligne1
1 2 3 4 5 6 7
ligne3 toto
ligne4 tata
ligne5 titi
[tmpfs]$ sed -i.BAK '/titi/c\
ligne6 tutu
' plop
[tmpfs]$ cat plop
ligne1
1 2 3 4 5 6 7
ligne3 toto
ligne4 tata
ligne6 tutu
[tmpfs]$
;-))
ok ca c'est la solution simplifiée pour résoudre mon 1er probleme (deja resolu)
mais concernant le 2nd ?
j'ai une piste pour isoler mon champ a modifier, mais je n'arrive pas a le modifier...
head -2 plop | tail -1 | awk '{print $5}'
mais concernant le 2nd ?
j'ai une piste pour isoler mon champ a modifier, mais je n'arrive pas a le modifier...
head -2 plop | tail -1 | awk '{print $5}'
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
7 juil. 2010 à 13:12
7 juil. 2010 à 13:12
[tmpfs]$ cat plop ligne1 1 2 3 4 5 6 7 ligne3 toto ligne4 tata ligne6 tutu [tmpfs]$ sed -i.ORIG '2 s/. /8 /5' plop [tmpfs]$ cat plop ligne1 1 2 3 4 8 6 7 ligne3 toto ligne4 tata ligne6 tutu [tmpfs]$
alors ca marche dans ce cas précis, mon souci, c'est que j'ai plusieurs fichiers a traiter...et que je veux modifier le 5eme champ de la ligne 2 (et non pas le chiffre 5), d'ou mon choix de awk !
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
7 juil. 2010 à 14:14
7 juil. 2010 à 14:14
Ben mon exemple modifie le 5ème champ (enfin la 5ème occurrence comprenant un caractère suivi d'un espace pour être précis) et non pas le chiffre 8 !
[tmpfs]$ cat plop ligne1 1 2 3 4 8 6 7 ligne3 toto ligne4 tata ligne6 tutu [tmpfs]$ sed '2 s/. /3 /5' plop ligne1 1 2 3 4 3 6 7 ligne3 toto ligne4 tata ligne6 tutu [tmpfs]$
ha oui en effet mon problème vient de la, c'est que mes fichiers ne sont pas forcement formatés de la meme facon....
cat plop
ligne1
1 2 3 4 5 6 7
cat plop1
ligne1
1 2 3 4 5 6 7
cat plop2
ligne1
1 2 3 4 5 6 7
cat plop
ligne1
1 2 3 4 5 6 7
cat plop1
ligne1
1 2 3 4 5 6 7
cat plop2
ligne1
1 2 3 4 5 6 7
je ne sais pas pourquoi ca ne se voit pas, mais il y a plus d'espaces entre les chiffres dans plop1 et plop2 !
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
7 juil. 2010 à 15:11
7 juil. 2010 à 15:11
Faut coller ton texte entre les balises "<code>TON TEXTE ICI</code>"
je disais donc :
ha oui en effet mon problème vient de la, c'est que mes fichiers ne sont pas forcement formatés de la meme facon....
ha oui en effet mon problème vient de la, c'est que mes fichiers ne sont pas forcement formatés de la meme facon....
cat plop ligne1 1 2 3 4 5 6 7 cat plop1 ligne1 1 2 3 4 5 6 7 cat plop2 ligne1 1 2 3 4 5 6 7
je reviens sur le sujet, vous voyez le probleme pour plop2 par exemple ?
si j'effectue :
sed '2 s/. /3 /7' plop2
j'obtiens:
ceci a cause de l'interpretation des espaces
si j'effectue :
sed '2 s/. /3 /7' plop2
j'obtiens:
ligne1 1 2 3 4 5 3 6 7
ceci a cause de l'interpretation des espaces
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
8 juil. 2010 à 12:12
8 juil. 2010 à 12:12
Il te faut voir du côté de "awk" pour traiter les champs... "sed" n'étant plus/pas du tout adapté pour ce genre de traitement.
c bien ce que je pensais, g un debut avec
head -2 plop | tail -1 | awk '{print $5}'
mais je ne vois pas comment remplacer ce 5eme champ...(qui peut voir + d'un caractere !)
sinon je ne vois pas non plus, du coté de sed, comment remplacer tous les champs commencant pas "2009" ?
du style :
sed '2 s/2009*/20100708/' plop
mais le "*" remplace simplement ce qu'il y a apres 2009
head -2 plop | tail -1 | awk '{print $5}'
mais je ne vois pas comment remplacer ce 5eme champ...(qui peut voir + d'un caractere !)
sinon je ne vois pas non plus, du coté de sed, comment remplacer tous les champs commencant pas "2009" ?
du style :
sed '2 s/2009*/20100708/' plop
mais le "*" remplace simplement ce qu'il y a apres 2009
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
8 juil. 2010 à 12:31
8 juil. 2010 à 12:31
Pour "awk", désolé je ne peux pas t'aider ;-(
Par contre pour "sed" que veux-tu faire exactement ?
Merci de poster un exemple AVANT => APRES
Par contre pour "sed" que veux-tu faire exactement ?
Merci de poster un exemple AVANT => APRES