Текст изменения во многих файлах

У меня есть проект C++, где каждый файл имеет в его начале некоторых строк лицензии. Теперь, то, что моя лицензия изменилась, я должен обновить ее в каждом файле. Я не хочу делать это вручную, начиная с его большой работы. Там какой-либо путь состоит в том, чтобы сделать это более автоматическим? Я попробовал http://regexxer.sourceforge.net/, но ее единственное полезное при контакте с краткими текстами (это не заменяло мою лицензию)...

Моя лицензия:

/****************************************************************************
**
** Copyright (c) 2014, mirx
** All rights reserved.
**
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
**
**   * Redistributions of source code must retain the above copyright
**     notice, this list of conditions and the following disclaimer.
**   * Redistributions in binary form must reproduce the above copyright
**     notice, this list of conditions and the following disclaimer in
**     the documentation and/or other materials provided with the
**     distribution.
**   * Neither the name of XYZ and its Subsidiary(-ies) nor the names
**     of its contributors may be used to endorse or promote products derived
**     from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
**
****************************************************************************/

Я просто хотел бы добавить некоторые строки к этому коду (замена новой версией) =, но как?

2
задан 5 October 2014 в 15:32

2 ответа

Если текст лицензии всегда появляется в точно том же месте в каждом файле, то Вы могли просто использовать sed для добавления нового текста после данного номера строки, например,

sed '34a \
** YOUR ADDITIONAL LICENCE TERMS\
** ADDED HERE
' file1.c

Вы могли объединить это с find для применения его к каждому .c файл, например

find -name '*.c' -exec sed -i '34a \
** YOUR ADDITIONAL LICENCE TERMS\
** ADDED HERE
' {} \;
0
ответ дан 7 October 2019 в 00:20

Другое решение с помощью awk.

Создайте новый сценарий changeLicense.awk как это:

{
  if (match($1,"^/\*.")!=0) {
     i = 0; flag = "false";
     comment[i++] = $0;
     while(getline > 0) {
       if (match($0,"Copyright") != 0) flag = "true"; 
       comment[i++] = $0; 
       if (match($0,"\*/$")!=0) {
         if (flag == "false") {
           for (J=0; J<i; J++) print comment[J];
         }
         else {
          while ((getline line < newLicense) > 0)
               print line;
          close(newLicense); 
         }
         next;
       }
     }
  } 
  print;
}

Этот сценарий ищет блок строк внутри /* и */ и если прокомментированный блок строк содержит строку "Авторского права", затем заменяют блок newLicense содержанием файла, иначе сохраняют комментарий.

Для изменения лицензии во всем файле проекта:

 find /path/project -name "*.cpp" -exec bash -c 'awk -f /path/changeLicense.awk -v newLicense=/path/fileWithNewContent $1 > $1.new; mv $1.new $1' _ {} \;

Этот сценарий выполнения changeLicense.awk на каждом .cpp файл, найденный в /path/project, вставьте результат .new файл и, чем исходная замена .cpp

Протестированный на lubuntu 12.04

1
ответ дан 2 December 2019 в 05:11

Другие вопросы по тегам:

Похожие вопросы: