Je voudrais remplacer $fileWithPath
dans $file
, cependant cela ne fonctionne pas parce que (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 de développer cette partie.
De plus, 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 "/".
$fileWithPath
contient des espaces, le mauvais modèle est inséré.sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn
semble fonctionner.Une meilleure méthode pour les chaînes littérales avec des barres obliques:
la source
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 séparateur alternatif pour la commande substitute. Les choix courants pour le délimiteur sont le caractère pipe | ou le hash # - le meilleur choix de caractère de délimitation dépendra souvent du type de fichier en cours de traitement. Dans votre cas, vous pouvez essayer
Le caractère 'g' après le dernier # est utilisé pour changer toutes les occurrences du fichier si vous ne devez modifier que la première occurrence puis supprimez le 'g'.
la source