지난 주에 나는 실수로 Eclipse 프로젝트의 모든 문자열을 외부화했습니다. 나는 이것을 복원해야 하며 나의 유일한 희망은 sed입니다. 스크립트 생성을 시도했지만 sed를 처음 사용하고 매우 복잡한 작업이기 때문에 슬프게도 실패했습니다. 내가 해야 할 일은 이것이다:
파일의 문자열은 class.java
현재 다음과 같은 형식(방법)을 갖습니다 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
물론, 매개변수를 seq 및 sed로 변경하십시오(아마도 class.java 대신 *java). 그러나 솔직히 이것이 귀하의 문제에 대한 최선의 해결책은 아닐 것입니다. "문자열 외부화" 버튼이 있으면 IDE에도 "문자열 내부화" 버튼이 있어야 하지 않나요?