1

Eclipse 的“从表中生成实体...”JPA 代码生成器坚持创建一个 @Id 字段和相关的 getter/setter 方法,尽管事实上这些是在我在向导步骤中指定的超类中定义的。

为了解决这个问题,我的想法是编写一个脚本来删除有问题的行并以其他方式清理生成的文件。(是的,我可以使用 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 字符开头,即使粘贴到此处时它不存在。

例如,要删除 getter/setter 行,我尝试过

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" 会删除所有方法结尾和类结尾的花括号。

我在运行 OS X 10.8.2 的 Mac 上执行此操作,如果这有什么不同的话。

谢谢。

4

1 回答 1

5

默认情况下,awk 和 sed 是基于行的工具,因此您不能匹配多于一行。

我建议使用正则表达式识别第一行的范围和最后一行的偏移量,如下所示:

sed -e '/^\tpublic String getId/,+2 d'

这将删除 linepublic String getId和以下两行。

于 2013-03-07T22:51:50.543 回答