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
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 "/".
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
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".