Поиск и замена текста в нескольких файлах

#linux #bash #ubuntu #sed

#linux #bash #ubuntu #sed

Вопрос:

Я пытаюсь заменить конкретную ссылку, которая существует на многих html-страницах, на ее версию https. Я пытался:

 grep -rl "http://server.iad.liveperson.net/hc/88956865/" ./ | xargs sed -i "s/http://server.iad.liveperson.net/hc/88956865//https://server.iad.liveperson.net/hc/88956865//g"
  

Когда я делаю это, даже как sudo , я получаю

 sed: couldn't open temporary file ./customers/sedTR3AMu: Permission denied
  

customers это только первый каталог в ./ . Итак, я считаю, что он зависает в первом файле, но не уверен, что не так, кроме этого.

Любая помощь приветствуется!

Комментарии:

1. Используйте другой разделитель с sed . sed 's_http://server.iad.liveperson.net/hc/88956865/_https://server.iad.liveperson.net/hc/88956865/_g потому что sed путается, где начинается и заканчивается разделитель.

Ответ №1:

Первое, что вы должны попробовать, это запустить sed команду как автономную для файла, который, как вы ранее знали, содержит эту строку. У меня такое ощущение, что sed команда может жаловаться на / символы…

Вам следует попробовать изменить sed команду на что-то вроде:

 sed -i 's;http://server.iad.liveperson.net/hc/88956865/;https://server.iad.liveperson.net/hc/88956865/;g'
  

То есть, используя ; вместо / в качестве разделителя, поэтому вам не нужно избегать / каждый раз при использовании .

Комментарии:

1. Перед буквенными периодами должна стоять обратная косая черта.

Ответ №2:

Пришлось запустить команду, вошедшую в систему как root, потому что sed -i создает временные файлы в / tmp и требует доступа на запись.

Спасибо: Использовал синтаксис jim с точкой с запятой, который отлично работал. ога, мне не нужно было избегать буквальных периодов.