3

我有一个名为的文件messages.properties,其中包含带有语法的行<key>=<string>。每个key都是独一无二的,但string不是。许多键可以有相同的字符串。同样在同一个文件夹中,我有一些 java 类从messages.properties. 他们通过方法获取字符串Messages.getString("<key>")。所以我需要做的是Messages.getString("<key>")通过"<key>"messages.properties. 这是来自@potong 的 sed onliner 可以解决问题。

sed 's|^\([^=]*\)=\(.*\)|s@Messages.getString("\1")@"\2"@g|;s/\\/\\\\/g' messages.properties |
sed -i -f - *.java

然而,这个问题是它不适用于messages.properties. 我应该如何修改脚本来解决这个问题?这是一个相关的问题Search and replace with sed

示例messages.properties

Sting.1=Str
Sting.2=String
Sting.3=String
Sting.4=Strring
Sting.5=Str

示例 java 类

System.Out.println(Messages.getString("Sting.1"));
System.Out.println(Messages.getString("Sting.2"));
System.Out.println(Messages.getString("Sting.3"));
System.Out.println(Messages.getString("Sting.4"));
System.Out.println(Messages.getString("Sting.5"));

需要的java类

System.Out.println("Str");
System.Out.println("String");
System.Out.println("String");
System.Out.println("Strring");
System.Out.println("Str");
4

1 回答 1

1

实际问题是日食分裂

Messages.getString("String.3")

分成2行,

    Messages
        .getString("String.3")

所以这行得通。

sed 's|^\([^=]*\)=\(.*\)|s@.getString("\1")@"\2"@g|;s/\\/\\\\/g' messages.properties |
sed -i -f - *.java
于 2012-04-05T04:11:57.063 回答