2010-03-09 7 views
1

나오지 : 문자 toupper를 위치에

sed "s/public \(.*\) get\(.*\)()/\1 \2/g" 

public class ChallengeTO extends AbstractTransferObject { 
     AuthAlgorithm Algorithm; 
     long Code; 
     int Iteration; 
     String PublicKey; 
     String Selt; 
}; 
I 변경할

publicKey-Algorithmalgorithm, PublicKey과에이

public class ChallengeTO extends AbstractTransferObject { 
     public AuthAlgorithm getAlgorithm(); 
     public long getCode(); 
     public int getIteration(); 
     public String getPublicKey(); 
     public String getSelt(); 
}; 

을 transfor합니다 곧. 두 번째 세그먼트 (\2)의 첫 번째 문자를 소문자로 변환하려면 어떻게해야합니까?

UPDATE

sed "s/public \(.*\) get\([A-Z]\)\(.*\)()/\1 \2\3/g"\2로 "내 편지"를 선택하지만 내가 전에 \L을 배치하면 그것은 너무 많은 여기

답변

1

(\3 포함) 변환 AWK 솔루션을

awk ' 
$1=="public" && $3~/^get/ { 
    sub(/^get/,"",$3) 
    $3=tolower(substr($3,1,1)) substr($3,2) 
    $0="\t"$2" "$3 
}1' file 

출력의

$ cat file 
public class ChallengeTO extends AbstractTransferObject { 
     public AuthAlgorithm getAlgorithm(); 
     public long getCode(); 
     public int getIteration(); 
     public String getPublicKey(); 
     public String getSelt(); 
}; 

$ ./shell.sh 
public class ChallengeTO extends AbstractTransferObject { 
     AuthAlgorithm algorithm(); 
     long code(); 
     int iteration(); 
     String publicKey(); 
     String selt(); 
}; 
당신은 여전히 ​​나오지 선호하는 경우

, 여기 \l

$ sed 's/public \(.*\) get\([A-Z]\)\(.*\)()/\1 \l\2\3/g' file 
public class ChallengeTO extends AbstractTransferObject { 
     AuthAlgorithm algorithm; 
     long code; 
     int iteration; 
     String publicKey; 
     String selt; 
}; 
+0

나는 sed one-liner가 내 문제를 해결해야한다고 생각한다. 나는 sed 방법이 너무 복잡 해지면 awk에 가지 않을 것이다. – Notinlist

+0

오케이, 그래서 당신은 sed 한 라이너 싶어. 업데이트를 참조하십시오. – ghostdog74

1

upper- to lower-case using sed 거의 동일합니다 추가 버전에 대한 수정이다.

편집 : 거기 질문/답변은 \L GNU sed 확장을 사용합니다. \L에 의해 시작된 전환은 \E에 의해 해제 될 수 있습니다. 따라서 "편지"를 \2에 넣으면 그 다음에 \L을 넣고 바로 뒤에 \E을 넣을 수 있습니다.

자세한 내용은 GNU sed documentation을 참조하십시오.

GNU 확장 프로그램이 없으면 두 개의 별도 명령을 사용하여이 작업을 수행 할 수 있습니다. y 명령을 사용하여 소스 문자 중 하나와 일치하는 문자를 해당 대상 문자로 변경할 수 있습니다. 이것은 유닉스 유틸리티 tr과 유사합니다.

+0

'\ L'은 전체를 변환합니다. 'PublicKey'는'publicKey'가 아니라'publickey'에 들어 있습니다. 이 정보 비트로 질문을 업데이트합니다. +1 – Notinlist

+0

편집의 첫 번째 부분은 훌륭합니다. 고맙습니다. 나는 더 많은 점수를 줄 수는 없다는 것을 슬프다 .--). 두 번째는 위치에 의존하지 않으므로 나에게 좋지 않습니다. – Notinlist

관련 문제