Мне нужно написать скрипт быстрого (к завтрашнему дню) фильтра, чтобы заменить разрывы строк (LF или CRLF), найденные в строках с двойными кавычками, на экранированную новую строку \n
.Контент представляет собой (неработающую) программу javascript, поэтому мне нужно разрешить escape-последовательности, такие как "ab\"cd"
и "ab\\"cd"ef"
внутри строки.
Я понимаю, что sed не подходит для работы, так как он работает на строку, поэтому я перехожу к perl, о котором ничего не знаю:)
Я написал это регулярное выражение:"(((\\.)|[^"\\\n])*\n?)*"
и протестировал его с http://regex.powertoy.org. Он действительно соответствует строкам в кавычках с переносами строк, однако, perl -p -e 's/"(((\\.)|[^"\\\n])*(\n)?)*"/TEST/g'
- нет.
Поэтому мои вопросы:
- как заставить perl соответствовать разрывам строк?
- как написать часть «replace-by», чтобы она сохраняла исходную строку и заменяла только новые строки?
Есть это аналогичный вопрос с решением awk, но это не совсем то, что мне нужно.
ПРИМЕЧАНИЕ: я обычно не задаю вопросы "пожалуйста, сделайте это для меня", но я действительно нехочется изучать perl / awk к завтрашнему дню ...:)
РЕДАКТИРОВАТЬ : пример данных
"abc\"def" - matches as one string
"abc\\"def"xy" - match "abcd\\" and "xy"
"ab
cd
ef" - is replaced by "ab\ncd\nef"