[LINUX] Sonderzeichen durch sed ersetzen / löschen

Da ich das Verzeichnis geändert habe, möchte ich alle Umgebungsvariablen in der Datei ändern.

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

ich möchte das machen

Mit anderen Worten ../${dir}/ Wenn Sie den Teil von löschen möchten.

Erfolgreiche sind die folgenden Befehle

python



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



** Erklärung **

Die Syntax von sed, die häufig bei der Suche angezeigt wird, lautet wie folgt (Dies ist der Grund, warum ich mehr Probleme habe)

python


sed 's/Die Zeichenfolge, die Sie ersetzen möchten/Zeichenkette nach dem Ersetzen/g'Geben Sie den Dateinamen ein

g bedeutet, alle Zeichenfolgen in der Eingabedatei zu ersetzen.


Optionen hinzufügen

python


sed -i 's/Die Zeichenfolge, die Sie ersetzen möchten/Zeichenkette nach dem Ersetzen/g'Geben Sie den Dateinamen ein

Mit der Option -i können Sie die Datei ohne Pipe & Cat überschreiben.

Diesmal ist es viele Male fehlgeschlagen, also habe ich nach der Option -i ".org" hinzugefügt.

python


sed -i".org" 's/Die Zeichenfolge, die Sie ersetzen möchten/Zeichenkette nach dem Ersetzen/g'Geben Sie den Dateinamen ein

Dadurch wird test.sh.org erstellt und ein Backup erstellt.


Jetzt ist es der Ersatz des speziellen Symbols des Hauptthemas. Vorläufig habe ich Folgendes versucht.

python


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

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

Ich bekomme eine Fehlermeldung. Der Schrägstrich scheint das Problem zu sein.

Fügen Sie dann die Zeichenfolge ein, die Sie durch '' ersetzen möchten.

python


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

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

Wenn Sie es nachschlagen, wenn die Zeichenfolge ein "/ (Schrägstrich)" enthält Es scheint gut, den Schrägstrich in ein anderes Symbol zu ändern. Ich habe diesmal "@" verwendet, aber ":", "*", "#" usw. Es scheint, dass jedes Symbol, das nicht in der Zeichenfolge verwendet wird, ausreicht.

python


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

Ich habe keinen Fehler erhalten und habe ihn mit vi überprüft

test.sh


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

Was ist das···

test.sh.org


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

Ich bin froh, dass ich ein Backup gemacht habe.

mv test.sh.org test.sh

Ich habe verschiedene Dinge ausprobiert, aber nicht alle

python


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

Nach einigem Ausprobieren scheint es, dass der sed-Befehl selbst keinen Schrägstrich benötigt.

python


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

Ist die Zeichenkette richtig eingeschlossen?

python


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

Erfolgreich.
Es war ein Fall, in dem ich dachte, ich müsste über die Bedeutung von Zitaten nachdenken.

Recommended Posts

Sonderzeichen durch sed ersetzen / löschen
Ersetzen Sie alles auf einmal durch sed
So löschen Sie die angegebene Zeichenfolge mit dem Befehl sed! !! !!
11. Ersetzen Sie die Registerkarten durch Leerzeichen
Ersetzen und löschen Sie Zeichenfolgen
Ersetzen Sie printf später durch LD_PRELOAD
Wie lösche ich mit SQLAlchemy?