2013-03-07 3 views
1

Eclipse의 "Generate Entities from Tables ..."JPA 코드 생성기는 @Id 필드 및 관련 getter/setter 메소드 작성을 강조합니다. 마법사 단계에서 지정하는 수퍼 클래스입니다.regex 패턴을 사용하여 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 문자가 없더라도 \ 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/' ... 

하지만 둘 다 일했다.

(두 패턴이 라인을 제거 할 찾을 이클립스 또는 TextWrangler에서 작동합니다.)

내가 할 수있는 단 한 줄의 예

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

를 들어, 삭제하지만이 삭제 이후,하지 도움이 얻을 " \ t} \ r "은 모든 메소드 종료 및 클래스 종료 중괄호를 삭제합니다.

차이가 있다면 OS X 10.8.2를 실행하는 Mac에서이 작업을 수행합니다.

감사합니다.

답변

3

기본적으로 awk 및 sed는 줄 기반 도구이므로 두 줄 이상을 비교할 수 없습니다.

나는 다음과 같이 마지막 줄에 오프셋 첫 번째 라인에 대한 정규식과를 사용하여 범위를 식별 제안 :

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

이 라인 public String getId, 두 다음 줄을 삭제합니다.

+1

감사합니다. 여기'sed : 1 : "/^\ tpublic String getId ...": 예상 컨텍스트 주소 "및" sed : 1 : "/ @ Id/+ 4 d ": 예상되는 컨텍스트 주소''sed -e '/^\ tpublic String getId /, + 2 d'$ file' 그리고'sed -e '/ @ Id /, + 4 d"$ file' 이것은 OS X 10.8.3에서 sed의 버전으로 인한 것일 수 있습니까? – pfurbacher

+0

그래, 나는 +2가 GNU 확장이라고 생각한다.끝 줄을 정규식과 일치 시키도록 시도해 볼 수도 있습니다 :'/ regex1 /,/regex2 /'. – Andy

+0

내 의견을 추가 한 후 같은 정보 (GNU 버전)를 발견했습니다. 실제로, 두 개의 주소 (2 개의 정규식 패턴)를 사용하면 OS X의 BSD 버전에서 속임수를 씁니다. (여기에 몇 가지 제안을 기다리는 동안 필자는 파일 매싱을하는 AppleScript를 작성했습니다. TextWrangler의 replace 함수를 위의 원래 질문에있는 정규식 패턴과 함께 사용하면됩니다. – pfurbacher

관련 문제