2012-09-20 4 views
1

J'ai un fichier de script qui remplace un mot par un autre dans les fichiers.Remplacer des caractères spéciaux dans une chaîne avec une séquence d'échappement dans la programmation shell

Ceci est un morceau de code que j'utilise. Maintenant, le problème auquel je suis confronté est quand Var1 et Var2 sont des noms de chemins. Je suis assez nouveau pour shell scripting. Je sais que je devrais mettre une séquence d'échappement. lire des fichiers csv je ne peux pas mettre manuellement les séquences d'échappement sur les utres .est un moyen de détecter les charaters spéciales avant que cette commande et les remplacer par séquence d'échappement

$ f est un nom de fichier

sed -i "s/$Var1/$Var2/g" "$f" 

Répondre

1

hy,

vous pouvez utiliser un autre caractère de séparation déclaration:

sed "s%PATTERN%PATTERN%" 

le premier caractère vu par sed, après la commande, sera utilisé pour séparer vos motifs.

Dans votre exemple, cela pourrait être:

sed -i "s%$Var1%$Var2%g" "$f" 

puis $Var1 et $Var2 pourrait tenir une / mais pas %. Si vous devez utiliser le séparateur comme motif, vous devez lui échapper avec \.

0

Vous pouvez citer les variables comme ceci:

sed -i '[email protected]'"${Var1}"'@'"${Var2}"'@g' "${f}" 
01 Notez également / est remplacé par @ parce que vous avez mentionné le chemin dans les variables

+0

peut-il être utilisé pour des mots normaux qui n'ont pas de caractères spéciaux ou que je ne devrais utiliser que si les variables du Var peuvent avoir l'un ou l'autre – user1364861

+0

**/** peut être remplacé par ** @ **, ** | **, **! **, etc. ** librement ** dans * sed *. – leafei

Questions connexes