Ostrzeżenie : nie uwzględnia to nowych linii. Aby uzyskać bardziej szczegółową odpowiedź, zobacz to pytanie SO . (Dzięki, Ed Morton i Niklas Peter)
Pamiętaj, że ucieczka od wszystkiego to zły pomysł. Sed potrzebuje wielu znaków cytowania, aby mieć się ich specjalne znaczenie. Na przykład, jeśli wybierzesz cyfrę w ciągu zastępującym, zmieni się ona w odniesienie wsteczne.
Jak powiedział Ben Blank, tylko trzy znaki muszą być poprzedzone znakiem zastępującym (same znaki ucieczki, ukośnik dla końca instrukcji i & dla zamiany wszystkich):
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"
Jeśli kiedykolwiek będziesz musiał uciec z KEYWORD
łańcucha, potrzebujesz tego:
sed -e 's/[]\/$*.^[]/\\&/g'
I mogą być używane przez:
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"
Pamiętaj, że jeśli używasz znaku innego niż /
separator, musisz zastąpić ukośnik w wyrażeniach powyżej używanym znakiem. Wyjaśnienie znajduje się w komentarzu PeterJCLaw.
Edytowane: Z powodu niektórych przypadków narożników, których wcześniej nie uwzględniono, powyższe polecenia zmieniły się kilka razy. Sprawdź historię edycji, aby uzyskać szczegółowe informacje.