Задать вопрос
juffinhalli
@juffinhalli

Как выполнить экранирование символов в регулярных выражениях?

Привет, Хабр!

Есть Linux
Есть файл.

Во нём нужно заменить строку "text1/text2 text3/text4" на "text5".

Гугл подсказал что вопрос решается с помощью
"sed '/s/старое/новое/g' file.txt > file2.txt".

Но если «старое» содержит символ "/" по получаем
sed: -e выражение #1, символ 10: неизвестный модификатор к `s'.

Если содержит пробел, тогда
sed: -e выражение #1, символ 6: незавершенная команда `s'

Экранирование с помощью "\" не помогло. Выручайте, кто может.

UPD. Проверено сработало: "sed s%с/тар\ ое%новое%g file.txt > file2.txt".
Получается символ "\" успешно экранирует пробел, но с "/" не справляется, поэтому "/" был заменён на "%". К сожалению, в этом случае "%" перестаёт экранироваться. Но ничто не мешает выполнить 2 команды, в одной будет "/", в другой "%".
Спасибо всем за помощь.
  • Вопрос задан
  • 40104 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@Next_Alex
«sed 's|старое|новое|g' file.txt > file2.txt».
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Wott
@Wott
Странно все это
[wott@vps ~]$ echo 'some/another here' | sed -e 's/some\/another here/more/'
more

Может быть конечно в вашем sh какие-то свои особенности экранирования но должно работать
Ответ написан
taliban
@taliban
php программист
А если два слеша поставить?
Ответ написан
Комментировать
Laplace
@Laplace
Кавычки точно одинарные?
Ответ написан
Комментировать
rdolgov
@rdolgov
юзайте на здоровье:
perl -pi -e 's/text1\/text2\ text3\/text4/text5/g'
Ответ написан
@ShamblerR
sed -i 's/if\x28\x24server_type == \x27nginx\x27\x29\x7B$/if($server_type == \x27apache\x27){/g' /usr/local/ispconfig/interface/web/sites/web_domain_edit.php


Все нормуль работет, че вы там выдумываете.
Hex-16 и ман к SED рулят
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы