Insérer caractère

Résolu/Fermé
greg11081975 Messages postés 5 Date d'inscription mercredi 16 septembre 2020 Statut Membre Dernière intervention 16 septembre 2020 - Modifié le 16 sept. 2020 à 10:36
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 16 sept. 2020 à 13:48
Bonjour à tous,

J'utilise la commande shell suivante :

cat $f|tail -n +2|sed "s, ; ,~,g" >> GHI_19667_S_DPD_STATUS_FILE.data

cette commande lit le fichier à partir de la deuxième ligne et remplace les ~ par des ; et envoie la ligne vers le fichier de sortie ! (mais ça vous l'aviez compris)

je voudrais avant l'instruction sed insérer le caractère ; à la 42ème position de la ligne.

Pouvez-vous m'aider :--)

Merci beaucoup

Greg
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
16 sept. 2020 à 10:48
Salut,

On peut avoir un bout de fichier en guise d'exemple ?

0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
16 sept. 2020 à 11:28
En attendant pour répondre à ta question :

$ echo "${A}"
aaaaaaaaaaaaAaaaaaaaaaaaa

$ sed 's/.\{12\}/&;/' <<<${A}
aaaaaaaaaaaa;Aaaaaaaaaaaaa

$ sed 's/.\{13\}/&;/' <<<${A}
aaaaaaaaaaaaA;aaaaaaaaaaaa


Sinon, tu n'as pas besoin de
cat
et de
tail
,
sed
peut tout faire…

0
greg11081975 Messages postés 5 Date d'inscription mercredi 16 septembre 2020 Statut Membre Dernière intervention 16 septembre 2020
16 sept. 2020 à 11:54
Bonjour Zipe31 et merci de ta réponse,

le fichier ressemble à ceci

PARCELNO;SCAN_CODE;DEPOT_CODE;DEPOTNAME;EVENT_DATE_TIME;ROUTE;TOUR;PCODE;SERVICE;CONSIGNEE_COUNTRY_CODE;CONSIGNEE_ZIP;ADD_SERVICE_1;ADD_SERVICE_2;ADD_SERVICE_3;WEIGHT;CUSTOMER_REFERENCE;POD_IMAGE_REF;RECEIVER_NAME;INFO_TEXT;LOCATION;
05348800423004;18;0998;Depot 0998;20200901135128;0000;;01;101;000;;;;;;2586068;;;133:1;;
05348800423004;18;0998;Depot 0998;20200901135128;0000;;01;101;000;;;;;;5409239;;;133:1;;


Peux-tu me dire à quoi sert le <<<${A} ?
Comment remplacerais-tu l'ensemble des commandes par sed ?

Merci de ton aide ;-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417 > greg11081975 Messages postés 5 Date d'inscription mercredi 16 septembre 2020 Statut Membre Dernière intervention 16 septembre 2020
16 sept. 2020 à 12:02
$ cat f2
PARCELNO;SCAN_CODE;DEPOT_CODE;DEPOTNAME;EVENT_DATE_TIME;ROUTE;TOUR;PCODE;SERVICE;CONSIGNEE_COUNTRY_CODE;CONSIGNEE_ZIP;ADD_SERVICE_1;ADD_SERVICE_2;ADD_SERVICE_3;WEIGHT;CUSTOMER_REFERENCE;POD_IMAGE_REF;RECEIVER_NAME;INFO_TEXT;LOCATION;
05348800423004;18;0998;Depot 0998;20200901135128;0000;;01;101;000;;;;;;2586068;;;133:1;;
05348800423004;18;0998;Depot 0998;20200901135128;0000;;01;101;000;;;;;;5409239;;;133:1;;


$ sed '1n;s/;/~/g;s/.\{42\}/&;/' f2
PARCELNO;SCAN_CODE;DEPOT_CODE;DEPOTNAME;EVENT_DATE_TIME;ROUTE;TOUR;PCODE;SERVICE;CONSIGNEE_COUNTRY_CODE;CONSIGNEE_ZIP;ADD_SERVICE_1;ADD_SERVICE_2;ADD_SERVICE_3;WEIGHT;CUSTOMER_REFERENCE;POD_IMAGE_REF;RECEIVER_NAME;INFO_TEXT;LOCATION;
05348800423004~18~0998~Depot 0998~20200901;135128~0000~~01~101~000~~~~~~2586068~~~133:1~~
05348800423004~18~0998~Depot 0998~20200901;135128~0000~~01~101~000~~~~~~5409239~~~133:1~~

Peux-tu me dire à quoi sert le <<<${A} ?
De la même manière qu'on peut rediriger l'entrée d'un fichier ainsi
< fichier
, cette syntaxe fait la même chose mais avec le contenu d'une variable. C'était un exemple pour aller au plus pressé.
0
greg11081975 Messages postés 5 Date d'inscription mercredi 16 septembre 2020 Statut Membre Dernière intervention 16 septembre 2020 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
16 sept. 2020 à 13:11
ok, donc echo récupe le stdin clavier et le met dans la variable A ensuite sed fait le reste ?

Par contre je ne comprend pas ce que fait 1n --> $ sed '1n;s/;/~/g;s/.\{42\}/&;/' f2

J'ai essayé de le remplacer par 2n en pensant qu'il allait commencer à la deuxième ligne du fichier mais non...

Et surtout, encore merci pour tes lumières ;-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417 > greg11081975 Messages postés 5 Date d'inscription mercredi 16 septembre 2020 Statut Membre Dernière intervention 16 septembre 2020
16 sept. 2020 à 13:20
ok, donc echo récupe le stdin clavier et le met dans la variable A ensuite sed fait le reste ?
Euh… non ! Je t'ai dit que ça c'était un exemple (la variable a été créée avant) pour te montrer comment insérer un caractère à la position adéquate. Ça n'a rien à voir avec ton problème.
Par contre je ne comprend pas ce que fait 1n
On demande à sed de lire la 1ère ligne, puis de passer à la ligne suivante (instruction "next" (n)). Donc les instructions qui suivent, s'appliqueront à toutes les autres lignes (sauf la 1ère).
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417 > greg11081975 Messages postés 5 Date d'inscription mercredi 16 septembre 2020 Statut Membre Dernière intervention 16 septembre 2020
16 sept. 2020 à 13:25
Mea culpa ;-(

Je n'avais pas fait attention qu'il fallait sauter les 2 premières lignes.

Donc :
sed '2,$ s/;/~/g;s/.\{42\}/&;/'  fichier


2,$
on n'applique les instructions qu'après la seconde ligne (2) et ce jusqu'à la fin du fichier ($).
0