Comment échapper au chemin du fichier dans SED?

30

Je voudrais remplacer $fileWithPath en $file , mais cela ne fonctionne pas car (je pense) le chemin n'est pas échappé. Comment y échapper?

sed -i 's/${fileWithPath}/HAHA/g' $file
    
posée UAdapter 07.11.2011 - 17:10
la source

3 réponses

60
sed -i 's|'$fileWithPath'|HAHA|g' file

Les guillemets simples définissent un littéral de chaîne. Mettre la variable en dehors du littéral permet au shell d’étendre cette partie.

Aussi: si vous allez analyser les chemins, utilisez un délimiteur dans la commande sed qui ne confond pas avec le délimiteur de répertoire "/".

    
réponse donnée ata 07.11.2011 - 17:40
la source
12

Une meilleure méthode pour les chaînes littérales avec des barres obliques:

sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
    
réponse donnée Jeff Lancaster 30.10.2013 - 00:46
la source
12

Dans les cas où la chaîne de remplacement ou la chaîne de modèle contient des barres obliques, vous pouvez utiliser le fait que GNU sed autorise un autre délimiteur pour la commande de remplacement. Les choix courants pour le délimiteur sont le caractère de canal | ou le hachage # - le meilleur choix de caractère de délimitation dépend souvent du type de fichier en cours de traitement. Dans votre cas, vous pouvez essayer

sed -i 's#'$fileWithPath'#HAHA#g' $file

Le caractère 'g' après la dernière # est utilisé pour modifier toutes les occurrences dans le fichier si vous devez uniquement modifier la première occurrence, puis supprimer le "g".

    
réponse donnée c0m3t 28.10.2014 - 09:24
la source

Lire d'autres questions sur les étiquettes