검색하고 sed로 바꾸기

검색하고 sed로 바꾸기

지난주에 저는 실수로 Eclipse 프로젝트의 모든 문자열을 외부화했습니다. 나는 이것을 되돌려야 하며 나의 유일한 희망은 sed입니다. 스크립트를 만들려고 했지만 sed를 처음 사용하는 사람이고 매우 복잡한 작업이기 때문에 한심하게 실패했습니다. 내가 해야 할 일은 이것이다:

파일 의 문자열은 class.java현재 다음 형식(method) 입니다 Messages.getString(<key>). 예 :

    if (new File(DataSource.DEFAULT_VS_PATH).exists()) {
        for (int i = 1; i <= c; i++) {
            if (!new File(DataSource.DEFAULT_VS_PATH
                    + Messages.getString("VSDataSource.89") + i).exists()) { //$NON-NLS-1$
                getnewvfspath = DataSource.DEFAULT_VS_PATH
                        + Messages.getString("VSDataSource.90") + i; //$NON-NLS-1$
                break;
            }
        }
    }

키와 일치하는 문자열은 messages.properties다음 형식으로 파일에 있습니다.

VSDataSource.92=No of rows in db = 
VSDataSource.93=Verifying db entry : 
VSDataSource.94=DB is open
VSDataSource.95=DB is closed
VSDataSource.96=Invalid db entry for 
VSDataSource.97=\ removed.
key=string

따라서 다음 형식의 Java 파일이 필요합니다.

    if (new File(DataSource.DEFAULT_VS_PATH).exists()) {
        for (int i = 1; i <= c; i++) {
            if (!new File(DataSource.DEFAULT_VS_PATH
                    + "String 2" + i).exists()) { //$NON-NLS-1$
                getnewvfspath = DataSource.DEFAULT_VS_PATH
                        + "String 1" + i; //$NON-NLS-1$
                break;
            }
        }
    }

으로 어떻게 이를 수행할 수 있습니까 sed? 아니면 더 쉬운 방법이 있나요?

답변1

"트릭"은 message.properties에서 sed 스크립트를 만드는 것입니다.

$ sed 's!/!\\!;s!\([^=]*\)=\(.*\)!s/"\1"/"\2"/g!' message.properties > message.sed
$ sed -f messages.sed class.java > class.java.reverted
$ rm messages.sed

다음과 같이 시작합니다.

VSDataSource.92=No of rows in db = 
VSDataSource.93=Verifying db entry : 
VSDataSource.NN=Foo/bar

그리고 다음과 같이 끝납니다:

s/"VSDataSource.92"/"No of rows in db= "/g
s/"VSDataSource.93"/"Verifying db entry : "/g
s/"VSDataSource.NN"/"Foo\/bar"/g

답변2

소스 컨트롤이 없나요?,. 나는 고치는 것을 제안하고 싶다저것아주 작은 샘플에서 나에게 도움이 된 이 스크립트를 실행하기 전에 문제가 발생했습니다.

#!/bin/bash
set -x
for i in `seq 92 97`
do
    X=$(sed -n s/^VSDataSource.$i=//p messages.properties)
    sed -i "s+Messages.getString(\"VSDataSource.`echo $i`\")+\"`echo $X`\"+g" class.java
done

물론 args를 seq 및 sed로 변경하십시오(아마도 class.java 대신 *java). 하지만 진지하게 이것이 문제에 대한 최선의 해결책은 아닙니다. '문자열 외부화' 버튼이 있으면 IDE에도 '문자열 내부화' 버튼이 있어야 하지 않나요?

관련 정보