LINUX.ORG.RU
ФорумAdmin

SED замена между


1

1

Добрый вечер! Мне требуется заменить весь между между 2 словами, слова начинаются так:

//start
какой-то текст
//stop and end

Тест в js файлах, решил с помощью find:

find . -name '*.js' -exec sed -i.back -e "s/start(.*)stop and end/text/g" {} \;

но почему-то не работает, сейчас пойдет очень большая критика, но я хотел бы узнать ответ, в чем именно заключается ошибка.



Последнее исправление: LinuxUs (всего исправлений: 2)
Ответ на: комментарий от kostik87

Прошу прощения, исправил, все равно не работает.

LinuxUs
() автор топика

sed - строковый редактор. он не находит подстроки start(.*)stop and end ни в одной строке текста.

anonymous
()
$ echo '//start
какой-то текст
//stop and end' |sed -r '/^\/\/start/,/^\/\/stop and end/{n;s/.+/test/}'
//start
test
//stop and end

Многострочный вариант:

$ echo '//start
какой-то текст
111
222
//stop and end' |awk '/^\/\/start/{a=1;print $0"\ntest"}/^\/\/stop and end/{a=0}{if(!a)print}'
//start
test
//stop and end

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

Sed умеет работать над блоками:

cat <<EOF>> /tmp/sedscript
/^\/\/start/,/^\/\/stop and end/c\\
text text text
EOF
sed -f /tmp/sedscript /tmp/filetochange

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

man sed, школота

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