sed を使用した検索と置換

sed を使用した検索と置換

先週、私は誤って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

おすすめ記事