2012-04-05 19 views
3

我有一個名爲messages.properties的文件,它具有語法爲<key>=<string>的行。每個key是唯一的,但是string不是。許多密鑰可以有相同的字符串。同樣在同一個文件夾中,我有一些從messages.properties讀取字符串的java類。他們通過方法Messages.getString("<key>")獲得字符串。所以我需要做的是通過從messages.properties讀取它們的值,將java類中的Messages.getString("<key>")轉換爲"<key>"。這是來自@potong的sed onliner可以做到的。sed腳本不能用於某些條目

sed 's|^\([^=]*\)=\(.*\)|[email protected]("\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")); 

Reqired Java類

System.Out.println("Str"); 
System.Out.println("String"); 
System.Out.println("String"); 
System.Out.println("Strring"); 
System.Out.println("Str"); 
+2

請考慮更新您的問題與示例屬性文件有3個條目(或最低限度說明問題)和您的相同的數據所需的輸出。祝你好運。 – shellter 2012-04-05 03:32:35

+0

@shellter我會添加它,但同時你可以檢查鏈接樣本。 – 2012-04-05 03:34:14

+0

hm ... 2件事,在屬性示例中看不到VSDataSource.89或VSDataSource.90。 2.請向我們展示您獲得上述區塊的輸出。你是什​​麼意思'在messages.properties中重複'不起作用?我想我是說,看到確切的輸入,對於產生錯誤的相同輸入的確切和必需的輸出將是有幫助的。祝你好運。 – shellter 2012-04-05 03:41:54

回答

1

實際的問題是,日食分爲

Messages.getString("String.3") 

到2線,

Messages 
     .getString("String.3") 

所以這個工作。

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

幹得好,可以發現問題並解決問題!儘管如此,謹防誤報,縮短搜索字符串的次數越多。 – potong 2012-04-05 05:39:37

+0

@tripleee你必須等待2天。 – 2012-04-05 06:37:09

+0

@potong這次我很幸運:) – 2012-04-05 06:37:32