Remplacer chaîne dans ligne fichier - Forum Shell

A voir également:Remplacer chaîne dans ligne fichierPHP: Remplacer une chaîne dans un fichier php ✓ - Forum - PHP Remplacement d 1 ligne ds un fichier ✓ - Forum - Linux / Unix Remplacer chaîne de caractères ds un fichier ✓ - Forum - Linux / Unix Supprimer ligne fichier linux - Conseils pratiques - Sed Word remplacer saut de ligne ✓ - Forum - Word

Bonjour à tous,
J’aimerais faire appel à vos talents pour résoudre une problématique que j’ai actuellement.

Je travaille sur Une machine unix et le script dans lequel je souhaite insérer la commande de modifications est en ksh..

Il y’a différents traitements dans ce script et j’aimerais y ajouter une fonctionnalité.

J’ai un fichier composé de plusieurs lignes de longueur fixe 30 caractères

Chaque ligne commence par une lettre suivi d’un chiffre et 2 espaces, ensuite une succession de chiffre et lettre. Exemple
A1 91190abc76TEST878 67890U
A2 75150cdc87JEUX767 765896

Donc ce que je cherche à faire c’est :
- si la 1er ligne débute par A1 et 2 espaces
Alors si en position 15 j’ai la chaîne TEST
Alors si en position 23 j’ai 3 espace vide
Je remplace cette zone par AIX

J’arrive à récupérer la 1er ligne avec une commande head, les différentes zones de tests avec des cut mais impossible de modifier la ligne avec un sed..
Je pense même que tout doit pouvoir être fait avec un sed mais je n’arrive pas à faire la commande
J’en suis à :
sed -i « .save.modif » -r ‘1(^A1 (.{14})TEST/

Je sèche pour la suite et indique la position de la modif..

Donc si quelques pouvait m’aider sur le sujet ça serait sympa ..

Merci à vous

Forum

A voir également:Remplacer chaîne dans ligne fichierPHP: Remplacer une chaîne dans un fichier php ✓ - Forum - PHP Remplacement d 1 ligne ds un fichier ✓ - Forum - Linux / Unix Remplacer chaîne de caractères ds un fichier ✓ - Forum - Linux / Unix Supprimer ligne fichier linux - Conseils pratiques - Sed Word remplacer saut de ligne ✓ - Forum - Word

Web: www.shapebootstrap.net

2 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Salut,

Je remplace cette zone par AIX
Qu'appelles-tu "zone" ? Toute la ligne ? Ou simplement un bout ?

Reply
réponses:
  • auteur

    Salut, la zone de 3 espace vide en position 23 par aix seulement.
    Si y’a d’autre zone à espace ailleurvdans la ligne le je n’y touche pas

  • auteur

    $ cat fich A1 91190abc76TEST878   67890U A2 75150cdc87JEUX767   765896 A1 91190abc76TOTO878   67890U A2 75150cdc87JEUX767   765896

    $ sed 's/\(A1 .\{10\}TEST[0-9]\{3\}\)\( \{3\}\)\(.*\)/\1AIX\3/' fich A1 91190abc76TEST878AIX67890U A2 75150cdc87JEUX767   765896 A1 91190abc76TOTO878   67890U A2 75150cdc87JEUX767   765896

    Si tu ne veux cibler que la 1ère ligne tu rajoutes un "1" devant le "s".

  • auteur

    Ca al 'air de faire parfaitement ce que je souhaite. J'ai juste changé la partie [0-9] car je peux avoir des lettre aussi donc j'ai mis .\{3\}.
    Par contre, je reste de la commande, je n'ai comprends pas grand chose..tu pourrais m'expliquer les différents blocs suivants?

    Merci de ton aide

  • auteur

    autre question, quand je rajoute l'option -i pour modifier le fichier courant j'ai l'erreur suivante :
    sed: illegal option -- i
    Usage: sed [-n] [-u] Script [File ...]
    sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]

  • auteur

    Salut,

    Concernant les explications, tout est expliqué là : Les sous-expressions et références arrières

    Concernant ton problème d'erreur, c'est que tu ne dois pas être sur un système GNU/Linux, mais sur un système Unix (AIX ?) qui ne comprend que très peu d'options (-n, -u et -e) ;-\
    Tu n'auras pas d'autres choix que de passer par un fichier temporaire ;-(

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

hello

$ cat fich A1  91190abc76TEST878   67890U A2  75150cdc87JEUX767   765896 A1  91190abc76TOTO878   67890U A2  75150cdc87JEUX767   765896 $ awk 'BEGIN {FIELDWIDTHS="4 10 4 3 3 6"; OFS=""} $1=="A1  " && $3=="TEST" && $5=="   " && NR<2 {$5="AIX"} 1' fich A1  91190abc76TEST878AIX67890U A2  75150cdc87JEUX767   765896 A1  91190abc76TOTO878   67890U A2  75150cdc87JEUX767   765896 

Reply
réponses:
  • auteur

    le résultat parle de lui même mais je n'ai comprends rien non plus à la commande...
    Pourrais-tu m’éclairer sur la commande si possible?

  • auteur

    {FIELDWIDTHS="4 10 4 3 3 6" on definit les 4 premiers car. comme le champ 1, les 10 suivants comme le champ 2, les 4 suivants comme le champ 3, etc
    OFS="" en sortie, le séparateur de champ est vide
    $1=="A1 " && $3=="TEST" && $5==" " && NR<2 on teste les champs selon les conditions émises au post #1
    {$5="AIX"} on remplace le champ 5 si les conditions sont remplies
    1 on imprime, 1 tout seul == {print $0]}

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed