Удаление многострочного текста из нескольких файлов

StackOverflow https://stackoverflow.com/questions/174472

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть куча java-файлов, из которых я хочу удалить строки javadoc с лицензией [меняю ее в своем коде].

Шаблон, который я ищу, таков

^\* \* ProjectName .* USA\.$

но совпадают по всем линиям

Есть ли способ, которым sed [или обычно используемый редактор в Windows / Linux] может выполнять поиск / замену многострочного шаблона?

Это было полезно?

Решение

Вот подходящая контрольная точка в моем любимом учебнике по sed.

Другие советы

ДА.Используете ли вы sed, awk, perl или что-то еще для решения этой проблемы?

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

Вот пример:

/\*(?:.|[\r\n])*?\*/
perl -0777ne 'print m!/\*(?:.|[\r\n])*?\*/!g;' <file>

Распечатывает все комментарии, выполняемые вместе.Тот (?:обозначение должно быть использовано для не фиксирующих скобок./ не обязательно убегать , потому что !ограничивает выражение.-0777 используется для включения режима slurp, а -n включает автоматическое считывание.

(Из: http://ostermiller.org/findcomment.html )

Возможно, кто-то время от времени все еще ищет такое решение. Вот один.

Используйте awk, чтобы найти строки, которые нужно удалить. Затем с помощью diff удалите строки и дайте sed убраться.

awk "/^\* \* ProjectName /,/ USA\.$/" input.txt \
  | diff - input.txt \
  | sed -n -e"s/^> //p" \
  >output.txt

Предупреждение: если первый шаблон существует, а второй - нет, вы потеряете весь текст под первым шаблоном - проверьте это сначала.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top