Insérer caractère
Résolu
greg11081975
-
zipe31 Messages postés 34620 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 34620 Date d'inscription Statut Contributeur Dernière intervention -
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
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
2 réponses
-
Salut,
On peut avoir un bout de fichier en guise d'exemple ?
-
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 decat
et detail
,sed
peut tout faire…
-
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 ;-) -
$ 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é. -
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 ;-) -
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). -
-