LINUX.ORG.RU

РЕШЕНО. Массовая замена строк в файлах

 


0

1

Есть набор файлов html, в которых нужно заменить http://site.net/tag/country/ на #

Пробовал многими командами:

sed -i~ "s/http://site.net/tag/country//#/g" index.html

perl -pi~ -e 's/http://site.net/tag/country//#/'

perl -pi~ -e 's/http:\/\/avstralia-travel.net\/tag\/country\//#/' index.html

grep -rl 'http://site.net/tag/country/' ./


sed -i~ "s/http\:\/\/site.net\/tag\/country\//#/g" index.html


grep 'http://site.net/tag/country/' -P -R -I -l  * | xargs sed -i 's/http://site.net/tag/country//#/g'

но все команды выдают разные ошибки

Спасибо всем за ответы, разобрался. Работает так: find ./ -type f -iname '*.html' -exec sed -i 's|http\:\/\/site.net\/2013\/05\/xishhnye-zhivotnye-avstralii\/||g' {} \; (заменять нужно было не на #, а на ничего).



Последнее исправление: enalesck (всего исправлений: 3)

Открой нам источник своих знаний о регулярках.

ashot ★★★★
()

Шота сильно.

anonymous
()
Ответ на: комментарий от Deleted

find ./country.net/ -type f -iname '*.html' -exec sed -i 's/http\:\/\/country.net\/tag\/exidna\//#/g' {} \;

ошибок не показывает, но ничего не заменяет.

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

cd country.net

find ./ -type f -iname '*.html' -exec sed -i 's|http\:\/\/country.net\/tag\/exidna\/|#|g' {} \;

ошибок не показывает, но ничего не заменяет

enalesck
() автор топика
Ответ на: комментарий от enalesck
find ./ -type f -iname '*.html' -exec sed -i 's|http\:\/\/country.net\/tag\/exidna\/|#|g' {} \;


ищет неэкранированную строчку «http\:\/\/country.net\/tag\/exidna\/»
экранирование в этом случае не работает, потому что в качестве разделителя используется '|', и двоеточие зачем там экранировать?

попробуйте

find ../../ -type f -iname '*.html' -exec sed -i 's|http://www.w3.org/1999/xhtml|#|g' {} \;

metawishmaster ★★★★★
()
Последнее исправление: metawishmaster (всего исправлений: 3)

и никто точку не заэкранировал

teod0r ★★★★★
()

Спасибо всем за ответы, разобрался. Работает так: find ./ -type f -iname '*.html' -exec sed -i 's|http\:\/\/site.net\/2013\/05\/xishhnye-zhivotnye-avstralii\/||g' {} \; (заменять нужно было не на #, а на ничего).

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

точку нужно экранировать

Да в регулярке http://site.net/ трудно в реальности представить, что может быть в тексте что-то другое, кроме самой точки. А вот то, что ТС как глухарь не обращает внимания на объяснения насчёт разделителя и его дурацкий обратный слеш — гораздо печальнее.

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