Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/02/2012, 14h07   #1
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 11
Points : 11
Par défaut Remplacer position dans un fichier

Bonjour,

Je cherche une commande linux capable de remplacer un caractère donné (selon une position) dans un fichier.

Exemple :
ABCDEFGHIJ -> remplacer la position 3 par 'espace'
AB DEFGHIJ -> résultat.

J'aimerai bien que toutes les lignes de mon fichier soient traitées

Je suis débutant dans Le monde Linux.

Si quelqu'un peut m'aider ca serai sympa !

Merci d'avance
menakikou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h19   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 073
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 073
Points : 4 165
Points : 4 165
Bonjour,

man cut
Code :
1
2
3
4
5
6
7
8
9
10
11
$ cat >menakikou.in
abcdefghij
abcdefghijk
abcdefghijkl
abcdefghijklm
 
$ cut -c1-2,4- --output-delimiter=' ' <menakikou.in 
ab defghij
ab defghijk
ab defghijkl
ab defghijklm
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2012, 14h36   #3
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 11
Points : 11
Par défaut Remplacer position dans un fichier

Merci pour la réponse.

J'aurais souhaiter le réaliser avec un sed , je suis en train de me documenter et je vais à mon rythme.

En fait, je voudrais remplacer dans mon fichier en entrée , la position 54 par Z, dans le cas où dans la position 54 est un blanc. donc il y a une condition à rajouter.

Aurais tu une idée ?! Merci
menakikou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 16h09   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Code :
sed 's/\(.\{53\}\) /\1Z/' fichier
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2012, 16h34   #5
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 11
Points : 11
Par défaut Remplacer position dans un fichier

Merci
menakikou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 17h13   #6
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 11
Points : 11
Par défaut Remplacer position dans un fichier

Ca ne fonctionne pas .

voila ce que j'ai en entrée :

VLACTRNG R000180999 20070413 000180000 400087116 D400087W1US 1US AA

je voudrais que ca devienne :
VLACTRNG R000180999 20070413 000180000 400087116ZD400087W1US 1US AA

Car entre le 400087116 et D400087W1US il y a un blanc .
menakikou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 17h16   #7
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Code :
1
2
3
4
5
6
7
8
9
10
$ echo $A
VLACTRNG R000180999 20070413 000180000 400087116 D400087W1US 1US AA
 
$ echo $A | sed 's/\(.\{48\}\) /\1Z/'
VLACTRNG R000180999 20070413 000180000 400087116ZD400087W1US 1US AA
 
$ sed 's/ /Z/5' <<<$A
VLACTRNG R000180999 20070413 000180000 400087116ZD400087W1US 1US AA
 
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2012, 17h21   #8
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 11
Points : 11
Par défaut Remplacer position dans un fichier

Merci it works now
menakikou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2012, 09h28   #9
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 11
Points : 11
Par défaut Remplacer position dans un fichier

Bonjour,

Je suis de retour ,

j'ai re-testé la commande est en effet quand la position 54 est vide, la commande remplace bien par le caractère Z, par contre si à la position 54 il y a déja un caractère et bien le caractère Z est ajouté aléatoirement .

Voici un exemple:
pour cette ligne en entrée :
Code :
VLACTRNG  R400861999   20111031 400861000   400861116 D455740W6SAZA6SA        L
on a bien en sortie :
Code :
VLACTRNG  R400861999   20111031 400861000   400861116ZD455740W6SAZA6SA        L
par contre :
Code :
VLACTRNG  R400848999   20071012 400848000   400848016BD400088W1USZ 1US      AAG2
Normalement , vu que dans la position 54 , il y a déja un caractère , la commande ne devrait pas rajouter de Z , et en sortie j'ai :
Code :
VLACTRNG  R400848999   20071012 400848000   400848016BD400088W1USZZ1US      AAG2

La commande étant :
Code :
sed 's/\(.\{48\}\) /\1Z/'
Pourriez vous m'aider svp !!

Merci d'avance
menakikou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2012, 09h46   #10
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Re-

Oups il suffit de rajouter "^" en début de syntaxe :

Code :
1
2
3
4
5
6
7
$ cat plop 
VLACTRNG  R400861999   20111031 400861000   400861116 D455740W6SAZA6SA        L
VLACTRNG  R400848999   20071012 400848000   400848016BD400088W1USZ 1US      AAG2
 
$ sed 's/^\(.\{53\}\) /\1Z/' plop 
VLACTRNG  R400861999   20111031 400861000   400861116ZD455740W6SAZA6SA        L
VLACTRNG  R400848999   20071012 400848000   400848016BD400088W1USZ 1US      AAG2
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2012, 09h56   #11
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 11
Points : 11
Par défaut Remplacer position dans un fichier

Merci pour la réponse :

Code :
1
2
3
4
5
6
7
8
 
$ cat plop 
VLACTRNG  R400861999   20111031 400861000   400861116 D455740W6SAZA6SA        L
VLACTRNG  R400848999   20071012 400848000   400848016BD400088W1USZ 1US      AAG2
 
$ sed 's/^\(.\{48\}\) /\1Z/' plop 
VLACTRNG  R400861999   20111031 400861000   400861116 D455740W6SAZA6SA        L
VLACTRNG  R400848999   20071012 400848000   400848016BD400088W1USZ 1US      AAG2
La commande n'a pas remplacé l'espace par Z dans la première ligne !
La ligne est celle ci :
Code :
VLACTRNG  R400861999   20111031 400861000   400861116 D455740W6SAZA6SA        L
En position 54 , il reste toujours un blanc or ca devrait le remplacer par Z !!

Je suis un peu perdu !!

Help please
menakikou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2012, 09h59   #12
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Je n'avais pas copié/collé le bon exemple

J'étais parti sur ton exemple de syntaxe sed sur 48 caractères. Entre temps j'ai corrigé avec 53, ça devrait aller mieux maintenant
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2012, 10h18   #13
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 11
Points : 11
Par défaut Remplacer position dans un fichier

Merci

Je viens de tester celle ci :

Code :
sed 's/^\(.\{53\}\) /\1Z/'
It works now !!

Je vais voir les cas particulier pour m'assurer que ca marche dans tous les cas !

Merci encore
menakikou est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h44.


 
 
 
 
Partenaires

Hébergement Web