Заменить строку в тексте, содержащую специальные символы (математическое уравнение) linux текст - PullRequest
1 голос
/ 18 июня 2020

Я хочу заменить строку, которая представляет собой часть математического уравнения:

f(x,z,time,temp)=-(2.0)/(exp(128*((x-2.5*time)*(x-2.5*time)+(z-0.2)*(z-0.2))))+(  

на новую, аналогичную приведенной выше. И новые, и старые строки сохраняются в bash переменных.

Основная проблема заключается в том, что математическое уравнение заполнено специальными символами, которые не позволяют выполнять правильный поиск и замену в режиме bash, даже когда я использовал в качестве разделителя специальный символ, который не используется в уравнении.

Я использовал

sed -n "s|$OLD|$NEW|g" restart.k

и

sed -i "s|$OLD|$NEW|g" restart.k

, но всегда получаю неверные результаты. Есть идеи решить это?

1 Ответ

1 голос
/ 19 июня 2020

В вашем шаблоне есть только *, который является специальным для sed, поэтому избегайте его и выполняйте замену как обычно:

sed "s:$(sed 's:[*]:\\&:g' <<<"$old"):$new:" infile

, если в вашем реальном образце есть больше специальных символов, тогда вам нужно будет добавить их в скобки []; есть несколько исключений, например:

если ^ символ: его можно разместить где угодно в [], но не в первом символе.
если ] символ: это должен быть первый символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...