1

Eclipseの「テーブルからエンティティを生成...」JPAコードジェネレーターは、ウィザードの手順で指定したスーパークラスで定義されているにもかかわらず、@Idフィールドと関連するゲッター/セッターメソッドの作成を要求します。

これを回避するために、私の考えは、問題のある行を削除し、生成されたファイルを他の方法でクリーンアップするスクリプトを作成することです。(はい、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で機能して、削除する行を見つけます。)

たとえば、1行の削除しか取得できません

awk '!/^\tpublic String getId.*\r/' ...

ただし、「\ t} \ r」を削除すると、メソッド終了およびクラス終了の中括弧がすべて削除されるため、これは役に立ちません。

違いがあれば、OSX10.8.2を実行しているMacでこれを行っています。

ありがとう。

4

1 に答える 1

5

デフォルトでは、awkとsedは行ベースのツールであるため、複数の行と照合することはできません。

次のように、最初の行の正規表現と最後の行へのオフセットを使用して範囲を特定することをお勧めします。

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

public String getIdこれにより、行とそれに続く2行が削除されます。

于 2013-03-07T22:51:50.543 に答える