Eclipse «Генерировать объекты из таблиц ...» Генератор кода JPA настаивает на создании поля @Id и связанных методов getter/setter, несмотря на то, что они определены в надкласс, который я обозначаю в шагах мастера.Удаление нескольких строк из файлов с помощью sed/awk с использованием шаблона регулярного выражения
Чтобы обойти это, моя идея - написать скрипт, чтобы удалить нарушающие строки и очистить созданные файлы другими способами. (Да, я мог бы сделать это вручную, используя диалог «Найти/заменить» в Eclipse, но я хочу автоматизировать весь набор изменений, потому что я буду выполнять эту процедуру генерации кода/очистки вручную несколько раз, работая на разных моделях.)
Проблема заключается в том, что я не могу найти правильный шаблон регулярного выражения для сопоставления нескольких строк для использования в awk или sed. Образцы регулярных выражений, которые я создаю, работают в диалоговых окнах поиска Eclipse и TextWrangler, но не с awk или sed.
Вот многострочные фрагменты текста на которые я хочу, чтобы удалить (в отдельных звонков в AWK/SED, конечно):
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false)
private String id;
и
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
Пожалуйста, обратите внимание, что каждая непустая строка в приведенном выше коде начинается с символа \ t, даже если его нет, когда вставлен здесь.
В качестве примера, чтобы удалить геттер/сеттер строки, я попытался
awk '!/\tpublic String getId\(\) \{\r\t\treturn this\.id;\r\t\}\r\r\tpublic void setId\(String id\) \{\r\t\tthis\.id = id;\r\t\}\r/' $file > temp.txt && mv temp.txt $file
или сокращенный вариант
awk '!/^\tpublic String getId.*\r.*\r.*\r\r.*\r.*\r.*\r\r/' ...
, но не работают.
(Обе модели работают в Eclipse, или TextWrangler найти строки, которые будут удалены.)
я могу получить только одну строку удаляет, например
awk '!/^\tpublic String getId.*\r/' ...
, но это не помогает, так как удаление " \ t} \ r "удалит все фигурные скобки, заканчивающиеся в конце концов и заканчивающиеся на класс.
Я делаю это на Mac под управлением OS X 10.8.2, если это имеет значение.
Спасибо.
Спасибо за попытку, но вот что я получаю за сообщение об ошибке: 'sed: 1:"/^ \ tpublic String getId ... ": ожидаемый контекстный адрес' и' sed: 1: "/ @ Id /, +4 d ": ожидаемый контекстный адрес' для 'sed -e '/^\ tpublic String getId /, + 2 d' $ file' и' sed -e "/ @ Id /, + 4 d" $ file' Это возможно, что это связано с версией sed на OS X 10.8.3? – pfurbacher
Да, я думаю, что +2 - расширение GNU.Вы также можете попробовать совместить конечную строку с регулярным выражением: '/ regex1 /,/regex2 /'. – Andy
Спасибо, я наткнулся на ту же информацию (версия GNU) после добавления комментария. Действительно, используя два адреса (два шаблона регулярных выражений), как вы предлагаете, делает трюк в версии BSD на OS X. (Оказывается, ожидая некоторых предложений здесь, я написал Applescript, который делает массивы файлов - он использует замену TextWrangler функция с шаблонами регулярных выражений в моем первоначальном вопросе выше. Это тоже отлично работает.) – pfurbacher