sed脚本不适用于某些条目

时间:2012-04-05 03:25:50

标签: linux sed

我有一个名为messages.properties的文件,其中包含语法为<key>=<string>的行。每个key都是唯一的,但string不是。许多键可以具有相同的字符串。同样在同一文件夹中,我有一些java类从messages.properties读取字符串。他们通过方法Messages.getString("<key>")获取字符串。所以我需要做的是通过从Messages.getString("<key>")读取它们的值,将java类中的"<key>"转换为messages.properties。这是来自@potong的sed在线人员。

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");

1 个答案:

答案 0 :(得分: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