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

Экранизация кавычек в sed

Добрый день.

Случилась проблема на сайте одного заказчика — злобный вирус пролез на сервер и жестоко покарал большую часть php и html файлов, дописав следующее:



Я хочу автоматом с помощью find -exec sed все убрать. Но не получается написать правильное выражение для sed'а.
1. В коде выше используются одновременно и одинарные и двойные кавычки — не понимаю как это правильно сэкранировать.

2. Я сумел почти решить проблему, разбив на несколько sed'ов:
sed «s#'http://firefoxstabs.com/'##g» includes/menu.php |
sed «s#'.js'##g» |
sed 's##?>#g'

Остался один косяк — это все выводится в консоль. Когда я пытаюсь сделать sed… | sed… | sed… > file в файле оказывается пустота. Что не правильно?
  • Вопрос задан
  • 9067 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
@ShamblerR
Ребятки читаем хелп HEX-16 наше все
find /tmp/backup -type f  -exec sed -i 's/                \x22IBLOCK_ID\x22 => \x2233\x22\x2C/                \x22IBLOCK_ID\x22 => \x22GOTOVO\x22\x2C/g' {} \;^C

Обходим целый ряд спецсимволов.

\x22
\x27
\x2C
Ответ написан
Комментировать
asm0dey
@asm0dey
Может быть надо как-нибудь так:
#!/bin/bash
function sedMyFile(){
sed1 -i ... $1
sed2 -i ... $1
sed3 -i ... $1
}

ls *.js|xargs sedMyFile -


Не проверял, работает ли, но, думается мне, как-то так должно бы.
Ответ написан
@equand
НЕ используйте sed file > file.
Об этом написано в мане SED
Используйте sed -i.bak -e 's#bla#foo#g' file
Ответ написан
6elkka
@6elkka
sed -i 's/aba/bab/'
чтобы экранировать кавычки внутри кавычек нужно писать так:
'abc'\''def'

получится:
abc'def
Ответ написан
Комментировать
conf
@conf
Ruby developer
sed… | sed… | sed… 2>&1 > file
Так?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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