Warnung : Dies berücksichtigt keine Zeilenumbrüche. Eine ausführlichere Antwort finden Sie stattdessen in dieser SO-Frage . (Danke, Ed Morton & Niklas Peter)
Beachten Sie, dass es eine schlechte Idee ist, alles zu entkommen. Sed braucht viele Charaktere, um entkommen zu können, um ihre besondere Bedeutung zu erhalten. Wenn Sie beispielsweise eine Ziffer in der Ersatzzeichenfolge maskieren, wird daraus eine Rückreferenz.
Wie Ben Blank sagte, müssen nur drei Zeichen in der Ersatzzeichenfolge maskiert werden (maskiert sich selbst, Schrägstrich für das Ende der Anweisung und & für alle ersetzen):
ESCAPED_REPLACE=$(echo $REPLACE | sed -e 's/[\/&]/\\&/g')
# Now you can use ESCAPED_REPLACE in the original sed statement
sed "s/KEYWORD/$ESCAPED_REPLACE/g"
Wenn Sie jemals aus der KEYWORD
Zeichenfolge entkommen müssen, benötigen Sie Folgendes:
sed -e 's/[]\/$*.^[]/\\&/g'
Und kann verwendet werden von:
KEYWORD="The Keyword You Need";
ESCAPED_KEYWORD=$(echo $KEYWORD | sed -e 's/[]\/$*.^[]/\\&/g');
# Now you can use it inside the original sed statement to replace text
sed "s/$ESCAPED_KEYWORD/$ESCAPED_REPLACE/g"
Denken Sie daran, wenn Sie ein anderes Zeichen /
als Trennzeichen verwenden, müssen Sie den Schrägstrich in den obigen Ausdrücken durch das von Ihnen verwendete Zeichen ersetzen. Erläuterungen finden Sie im Kommentar von PeterJCLaw.
Bearbeitet: Aufgrund einiger Eckfälle, die zuvor nicht berücksichtigt wurden, haben sich die obigen Befehle mehrmals geändert. Überprüfen Sie den Bearbeitungsverlauf auf Details.