Avvertenza : questo non considera le nuove righe. Per una risposta più approfondita, vedere invece questa domanda SO . (Grazie, Ed Morton e Niklas Peter)
Nota che fuggire da tutto è una cattiva idea. Sed ha bisogno di sfuggire a molti personaggi per ottenere il loro significato speciale. Ad esempio, se si evita una cifra nella stringa di sostituzione, si trasformerà in un riferimento indietro.
Come ha detto Ben Blank, ci sono solo tre caratteri che devono essere sfuggiti nella stringa di sostituzione (sfugge a se stessi, barra in avanti per la fine dell'istruzione e & per sostituire tutto):
ESCAPED_REPLACE=$(printf '%s\n' "$REPLACE" | sed -e 's/[\/&]/\\&/g')
# Now you can use ESCAPED_REPLACE in the original sed statement
sed "s/KEYWORD/$ESCAPED_REPLACE/g"
Se mai dovessi sfuggire al KEYWORD
stringa, quella che ti serve è la seguente:
sed -e 's/[]\/$*.^[]/\\&/g'
E può essere utilizzato da:
KEYWORD="The Keyword You Need";
ESCAPED_KEYWORD=$(printf '%s\n' "$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"
Ricorda, se usi un carattere diverso da /
come delimitatore, devi sostituire la barra nelle espressioni sopra con il carattere che stai usando. Vedi il commento di PeterJCLaw per una spiegazione.
Modificato: a causa di alcuni casi angolari precedentemente non considerati, i comandi sopra sono cambiati più volte. Controlla la cronologia delle modifiche per i dettagli.