[LINUX] Remplacer / supprimer les symboles spéciaux par sed

Depuis que j'ai changé de répertoire, je souhaite modifier toutes les variables d'environnement du fichier.

test.sh


../../${dir}/file1.txt
../../${dir}/file2.txt
../../${dir}/file3.txt
../../${dir}/file4.txt
../../${dir}/file5.txt

test.sh


../file1.txt
../file2.txt
../file3.txt
../file4.txt
../file5.txt

Je veux faire ça

En d'autres termes ../${dir}/ Lorsque vous souhaitez supprimer la partie de.

Les commandes réussies sont les commandes suivantes

python



sed -i s@'../${dir}/'@@g test.sh



** Explication **

La syntaxe de sed qui apparaît souvent lors de la recherche est la suivante (C'est la raison pour laquelle j'ai plus de problèmes)

python


sed 's/La chaîne de caractères que vous souhaitez remplacer/Chaîne de caractères après remplacement/g'Nom du fichier d'entrée

g signifie remplacer toutes les chaînes du fichier d'entrée.


Ajouter des options

python


sed -i 's/La chaîne de caractères que vous souhaitez remplacer/Chaîne de caractères après remplacement/g'Nom du fichier d'entrée

Vous pouvez écraser le fichier sans pipe & cat en utilisant l'option -i.

Cette fois, il a échoué plusieurs fois, j'ai donc ajouté ".org" après l'option -i.

python


sed -i".org" 's/La chaîne de caractères que vous souhaitez remplacer/Chaîne de caractères après remplacement/g'Nom du fichier d'entrée

Cela créera test.sh.org et effectuera une sauvegarde.


Maintenant, c'est le remplacement du symbole spécial du sujet principal. Pour le moment, j'ai essayé ce qui suit.

python


sed -i".org" 's/../${dir}///g' test.sh

sed: -e expression #1, char 13: unknown option to `s'

J'obtiens une erreur. La barre oblique semble être le problème.

Ensuite, entourez la chaîne de caractères que vous souhaitez remplacer par «».

python


sed -i".org" 's/'../${dir}/'//g' test.sh

sed: -e expression #1, char 7: unknown option to `s'

Si vous recherchez, s'il y a un "/ (barre oblique)" dans la chaîne Il semble bon de changer la barre oblique sed en un symbole différent. J'ai utilisé "@" cette fois, mais ":", "*", "#", etc. Il semble que tout symbole qui n'est pas utilisé dans la chaîne de caractères fera l'affaire.

python


sed -i".org" 's@'../${dir}/'@@g' test.sh

Je n'ai pas eu d'erreur, donc je l'ai vérifié avec vi

test.sh


${difile1.txt
${difile2.txt
${difile3.txt
${difile4.txt
${difile5.txt

Qu'est-ce que c'est ça···

test.sh.org


../../${dir}/file1.txt
../../${dir}/file2.txt
../../${dir}/file3.txt
../../${dir}/file4.txt
../../${dir}/file5.txt

Je suis content d'avoir fait une sauvegarde.

mv test.sh.org test.sh

J'ai essayé diverses choses, mais pas toutes

python


sed -i".org" "s@'../${dir}/'@@g" test.sh
sed -i".org" "s@../${dir}/@@g" test.sh

Après quelques essais et erreurs, il semble que la commande sed elle-même ne nécessite pas de barre oblique.

python


sed -i".org" s@../${dir}/@@g test.sh

La chaîne de caractères est-elle correctement encadrée?

python


sed -i".org" s@'../${dir}/'@@g test.sh

Réussi.
C'était un cas où je pensais devoir réfléchir à la signification des citations.

Recommended Posts

Remplacer / supprimer les symboles spéciaux par sed
Remplacez tout d'un coup par sed
Comment supprimer la chaîne de caractères spécifiée avec la commande sed! !! !!
11. Remplacez les onglets par des espaces
Remplacer et supprimer des chaînes
Remplacez printf plus tard par LD_PRELOAD
Comment supprimer avec SQLAlchemy?