Поэтому мне нужно отредактировать кучу HTML-файлов .. Я использовал sed раньше, в пакетном режиме, но проблема, с которой я столкнулся, состоит в том, что моя строка текста, чтобы найти и заменить обе, содержит апостроф. Хотя вы можете изменить разделитель sed, просто выбирая все, что хотите, очевидно, вы не можете сделать то же самое с апострофом, который начинает и заканчивает команду ... Есть ли другой способ сделать это?

Я ищу, чтобы найти '_blank'); "/> и сделать что-то еще .. Используя @ в качестве разделителя, я могу изменить практически любую часть, но я хочу добавить к ней больше параметров и, следовательно, иметь возможность «отправлять» апострофии. Есть ли способ сделать это или мне нужно искать другую команду? Опять же, многие файлы, предпочли бы не делать вручную.

Спасибо,

151

редактировать: я не указал точно, что я хотел сделать из-за целого аспекта «не просить, чтобы что-то было сделано для вас», который поддерживают эти сайты, но меня попросили в комментариях, так что по сути ....

Ищу изменения

ALIGN=CENTER '_blank');" /> 

чтобы:

ALIGN=CENTER '_blank', 'width=100%'); />

что я пробовал:

find . -name "*.php" -print | xargs sed -i "s@'_blank');" />@'_blank', 'width=100%'); />@g

Конечно, в тестировании я не использую * .php, я просто тестирую один конкретный файл.

1 ответ1

0

Ваша команда должна быть

find . -name '*.php' -exec sed -i 's/);"/, \'width=100%');/' {} \;

Нет необходимости в канале с xargs: опция -exec подойдет именно вам; Также -print не нужен.

Разделители '...' защищают текст, который будет изменен от оболочки; по этой причине вам нужно избежать (т. е. предшествовать ' с обратной косой чертой \') апостроф внутри вашей замены, чтобы сказать sed: смотри, это не конец шаблона s , а буквальный символ, который следует считать частью шаблона в целом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .