3

comment remplacer une chaine de caractère dans un fichier sous Linux

petit mémo sur comment remplacer une chaine de caractère dans un fichier sous Linux.

Méthode sans édition: sed

sed -i -e "s/machaines1/machaine2/g" fichier

si la chaîne contient des caractères spéciaux, on devra les échapper avec ‘\’
exemple:

sed -i -e "s/\#machaines1/\#machaine2/g" fichier

Méthode en édition: vi

édition du fichier avec la commande vi

vi fichier

puis dans l’éditeur saisir:

:%s/machaine1/machaine2/

ce qui donne en image
terminal vi

Partager l'article :





fred

Administrateur Système autodidacte et utilisateur au quotidien de GNU/Linux (Debian, Ubuntu, Manjaro et un peu de CentOS).

3 Comments

  1. Bonjour,

    Ce petit mémo est bien pratique. Néanmoins, quand je le teste, il m’affiche seulement le résultat mais ne modifie pas mon fichier de départ. Dois-je rajouter autre chose pour qu’il le fasse automatiquement dans mon fichier sans que je ne lui précise le nom du fichier?

    Voici ce que je teste:

    find . -name « * » -exec sed -e ‘s#/data/dmc/#/data/DMC/#g’ {} \;

    Je souhaite remplacer dans tous les fichiers de tous les répertoires et sous répertoires. Je ne peux donc pas préciser mon nom de fichier en sortie.

    Merci d’avance.

    Laurent

  2. Bonjour Deneau,
    ce n’est pas très clair car tu ne dis pas par quoi tu veux remplacer. En ce qui concerne ta commande, si je comprend bien tu veux remplacer dmc par DMC,
    pour moi, ça ne va pas :
    [code lang= »shell »]
    sed -i -e ‘s#/data/dmc/#/data/DMC/#g’
    [/code]
    remplace cette chaîne par :
    [code lang= »shell »]
    sed -i -e ‘s/data\/dmc/data\/DMC/g’
    [/code]

  3. bonjour
    voila la bonne commande pour changer
    sed -i « s/\data/dmc/\data/DMC/g » file_to_change
    pour le faire dans toute unestructure defchie d une extention donne .ext a partir de la racine de cet structure (repertoir top):
    find . -name « *.ext » -type f -exec sed -i « s/\data/dmc/\data/DMC/g » {} \;

    bon courae

    :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *