Удаление многострочного текста из нескольких файлов
Вопрос
У меня есть куча java-файлов, из которых я хочу удалить строки javadoc с лицензией [меняю ее в своем коде].
Шаблон, который я ищу, таков
^\* \* ProjectName .* USA\.$
но совпадают по всем линиям
Есть ли способ, которым sed [или обычно используемый редактор в Windows / Linux] может выполнять поиск / замену многострочного шаблона?
Решение
Вот подходящая контрольная точка в моем любимом учебнике по sed. р>
Другие советы
ДА.Используете ли вы sed, awk, perl или что-то еще для решения этой проблемы?
Большинство инструментов регулярных выражений позволяют задавать многострочные шаблоны.Просто будьте осторожны с регулярными выражениями, которые слишком жадные, иначе они будут соответствовать коду между комментариями, если он существует.
Вот пример:
/\*(?:.|[\r\n])*?\*/
perl -0777ne 'print m!/\*(?:.|[\r\n])*?\*/!g;' <file>
Распечатывает все комментарии, выполняемые вместе.Тот (?:обозначение должно быть использовано для не фиксирующих скобок./ не обязательно убегать , потому что !ограничивает выражение.-0777 используется для включения режима slurp, а -n включает автоматическое считывание.
Возможно, кто-то время от времени все еще ищет такое решение. Вот один.
Используйте awk, чтобы найти строки, которые нужно удалить. Затем с помощью diff удалите строки и дайте sed убраться.
awk "/^\* \* ProjectName /,/ USA\.$/" input.txt \
| diff - input.txt \
| sed -n -e"s/^> //p" \
>output.txt
Предупреждение: если первый шаблон существует, а второй - нет, вы потеряете весь текст под первым шаблоном - проверьте это сначала.