Я пытаюсь написать сценарий оболочки, который заменит любые символы/строки, которые я выбираю, используя sed. Моя первая попытка работала, за исключением специальных символов. Я пытаюсь использовать sed для исправления специальных символов, чтобы их тоже искали или заменяли. Я решил упростить сценарий для тестирования, и просто иметь дело с одним оскорбительным персонажем. Однако у меня все еще есть проблемы.Замена специальных символов в сценарии оболочки с помощью sed
Edited Script
#! /bin/sh
oldString=$1
newString=$2
file=$3
oldStringFixed=$(echo "$oldString" | sed 's/\\/\\\\/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\[/\\\[/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\]/\\\]/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\^/\\\^/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\*/\\\*/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\+/\\\+/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\./\\\./g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\$/\\\$/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\-/\\\-/g')
sed -e "s/$oldStringFixed/$newString/g" "$file" > newfile.updated
mv newfile.updated "$file"#! /bin/sh
В случае, если это не ясно, я пытаюсь искать через oldString для [характера, и заменить его экранирование и присвоить результаты oldStringFixed (мне нужно backticks для этого?). Нижние две строки - это слегка измененные версии моего исходного сценария, которые, я считаю, работают правильно.
Когда я вторят фиксированную строку, ничего не отображается, и SED выдает ошибку
sed: can't read [: No such file or directory
Может кто-нибудь объяснить, что случилось с моей первой SED линии?
EDIT:
Благодаря Jite, скрипт работает лучше. Однако у меня все еще возникает проблема с заменой одинарных кавычек пробелами, т. Е. '*'. Новая версия выше.
есть намного больше, чем specias символ «[», как. \ * +? для OldString и \ &/для newString – NeronLeVelu
Довольно похоже на вопрос [this] (http://stackoverflow.com/questions/20427289/quoting-special-characters-with-sed/20427706). – devnull