Как заменить абзац с помощью команды sed

У меня есть текст лицензии в моем файле Java. Я хочу заменить его на другую лицензию. У меня есть много java-файлов для этого. Как это сделать с помощью команды «sed» или сценария bash?

Оригинальная лицензия выглядит так,

/*
 * some txt
 * some txt
*/

package abc;

И я хочу заменить приведенный выше текст лицензии следующим:

/*
 * new license
 * new license
*/

package abc;

person Manula Thantriwatte    schedule 10.07.2013    source источник
comment
Подобный вопрос уже задавался. Это может помочь вам. stackoverflow.com/questions/8454525 /   -  person Agnivesh    schedule 10.07.2013
comment
Я бы использовал файл исправления, возможно, с нечетким совпадением.   -  person ams    schedule 10.07.2013
comment
аналогичный xml вопрос.   -  person Endoro    schedule 10.07.2013


Ответы (2)


Что-то вроде этого сделает это... убедитесь, что вы сначала тестируете, не используя флаг -i, или же убедитесь, что у вас есть последние резервные копии любого из файлов, которые соответствуют вашему шаблону поиска.

for file in $(find /path -type f -name "*.jar" -exec egrep 'old license text' \;)
do
  sed -ri 's/old license text/new license text/g' ${file}
done
person Avedis    schedule 10.07.2013

Вы ограничены sed, awk и др.? Было бы проще сделать это в Perl:

perl -e 'undef $/;
  $_=<>;
  s|(/\*\n)[\s\S]*(\*/\s*package)|$1 * new license\n * new license\n$2|;
  print' in.txt
person Ansgar Wiechers    schedule 10.07.2013