LINUX.ORG.RU

Закоментировать строку, если если в строке присутствует определенный текст

 ,


0

2

Добрый день!
Подскажите, пожалуйста, как Закоментировать строку, если если в строке присутствует определенный текст?
Пример

SecRule REQBODY_ERROR "!@eq 0" \
"id:'200002', phase:2,t:none,log,deny,status:400,msg:'Failed to parse request body.',logdata:'%{reqbody_error_msg}',severity:2"



То как с помощью sed ее закоментировать?

Заранее спасибо

Вставить в начало строки символ «комментария», что тут непонятно?

Или ты из тех кто ленится почитать о sed и просит сделать все за тебя? Любитель халявы, ну жди подачек.

futurama ★★★★★
()

например так:

sed -e 's/.*определённый текст/# \0/'
# или в зависимости от того, чем комментировать надо
sed -e 's/.*определённый текст/\/\/ \0/'
Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 1)
Ответ на: комментарий от futurama

С первой строкой я разобрался.

sed -i 's/SecRule REQBODY_ERROR/#SecRule REQBODY_ERROR/g' 2


А вот вторую не мог победить
sed -i 's/\"id\:\'200002\'/#\"id\:\'200002\'/g' file 
sed -i 's/\"id:\'200002\'/#\"id:\'200002\'/g' file 
sed -i 's/"id:'200002'/#"id:'200002'/g' file 
sed -i 's/\"id\\:\\'200002\\'/#\\"id\\:\\'200002\\'/g' file 
sed -i 's/\"id\:\'200002\'/#\"id\:\'200002\'/g' file 
sed -e 's/\"id\:\'200002\'/#\"id\:\'200002\'/g' file 
chemtech
() автор топика
Ответ на: комментарий от vodz

Затем, что заменяется вся строка на всю строку (\0) с # в начале. Без .* будет заменяться только сам текст, и комментироваться начиная с него, а не с начала строки.

Выше предложили ещё один вариант, там, соответственно, ищется текст, и если нашёлся, то выполняется замена начала строки на # . Результат одинаковый.

~ % echo hello world | sed -e 's/world/# \0/'
hello # world
~ % echo hello world | sed -e 's/.*world/# \0/'
# hello world
~ % echo hello world | sed -e '/world/s/^/#\ /'
# hello world
Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 5)
Ответ на: комментарий от Psych218

А, точно. Кстати, похоже ваши варианты проблему ТСа не решают, у него строка продолжается по '\'

vodz ★★★★★
()
Ответ на: комментарий от vodz

Сделал так

sed -e 's/.*SecRule REQBODY_ERROR/# \0/' %{buildroot}/etc/nginx/modsecurity.conf > %{buildroot}/etc/nginx/modsecurity.conf.new
sed -e 's/.*Failed to parse request body/# \0/' %{buildroot}/etc/nginx/modsecurity.conf.new > %{buildroot}/etc/nginx/modsecurity.conf.new.new
rm -f %{buildroot}/etc/nginx/modsecurity.conf.new
mv -f %{buildroot}/etc/nginx/modsecurity.conf.new.new %{buildroot}/etc/nginx/modsecurity.conf



работает
chemtech
() автор топика
Ответ на: комментарий от chemtech

Сделал так

Временные файлы не нужны уже давно, для этого опция -i есть. Ну и с продожением строки по '\' это решение не работает же.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от chemtech

уу, есть же консольные редакторы, тотже nano, mcedit, ну худой конец vi.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.