sed найти замену — экранирование специальных символов

#sed

#sed

Вопрос:

Я заменял одну строку, как в httpd.conf, столкнувшись с проблемой с уменьшением обратной косой черты при использовании sed ,

исходная строка

 LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" "%{True-Client-IP}i"" combined
  

заменено на

 LogFormat "%h %l %u %t %D "%r" %>s %b "%{Referer}i" "%{User-Agent}i" "%{True-Client-IP}i"" combined
  

любой совет по экранированию всех этих специальных символов

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

1. вы хотели добавить %D после %t ?

2. да, используя sed или другой способ вставки

Ответ №1:

Попробуйте это:

 sed -e 's/%t \"/%t %D \"/'
  

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

1. sed -e -i ‘s/%t \»/%t %D \»/’ httpd.conf sed: -e выражение #1, символ 1: неизвестная команда: `-‘

2. @Christopher без -i как были бы сохранены изменения?

3. Перенаправьте результат в другой файл, а затем замените старый файл новым. sed -e 's/%t \"/%t %D \"/' httpd.conf > httpd.conf.new; mv httpd.conf.new httpd.conf

Ответ №2:

Через sed,

 $ sed -i 's/^(.*%t)(.*)$/1 %D2/g' file
LogFormat "%h %l %u %t %D "%r" %>s %b "%{Referer}i" "%{User-Agent}i" "%{True-Client-IP}i"" combined
  

или

 $ sed -i 's/%t/%t %D/' file
LogFormat "%h %l %u %t %D "%r" %>s %b "%{Referer}i" "%{User-Agent}i" "%{True-Client-IP}i"" combined
  

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

1. когда я когда-либо выполняю команду sed, она отображает весь http.conf, и ничего не изменилось

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