2017-03-21 19 views
0

我想在clients.conf中獲取所有radius客戶端。我曾嘗試使用sed,但我的java代碼未能執行sed,如何使用java模式匹配來做同樣的事情?clients.conf中的java模式匹配radius客戶端

sed -n '/^[^#]lient \([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/,/}/{p}' /home/clients.conf 

client 172.1.1.0/24 { 
secret   = bgate 
} 

或者,也許有人能告訴我有什麼錯我java代碼來執行sed

String[] cmdArray = {"sed", "-n", "'/^[^#]lient \\([0-9]\\{1,3\\}\\.\\)\\{3\\}[0-9]\\{1,3\\}/,/}/{p}'","/home/clients.conf"}; 
Runtime run = Runtime.getRuntime(); 
Process process = run.exec(cmdArray); 
+0

請分享您的輸入和預期的輸出文件。 –

+0

'#client 192.168.0.0/24 { #祕密= testing123-1 #短名稱=專用網絡-1 #} # 客戶123.168.238.5 { 祕密= BGATE } 客戶172.1.1.0/24 { 祕密= BGATE }'我想所有的有效客戶端配置 客戶123.168.238.5 { 祕密= BGATE } 客戶172.1.1.0/24 { 祕密= BGATE } – crocus

回答

0

最後得到了java執行sed,結果我必須使用bash -c。 ([0-9] \ {1,3 \} \。\)\ {3 \ } [0-9] \ {1,3 \} /,/}/{p}'/home/clients.conf「};

0

你可以嘗試這樣的事情 -

​​

而且還可以過濾,按您的篩選條件。

0

這是容易做到這一點的Java:

import java.util.regex.Pattern; 
import java.io.BufferedReader; 
import java.io.FileReader; 


public class Clients { 

    public static void main(String[] args) throws Exception { 
     Pattern pattern = Pattern.compile("^[^#]lient +[0-9./]+ +\\{"); 
     BufferedReader reader = new BufferedReader(new FileReader(args[0])); 
     String line; 
     boolean inConfig = false; 
     while ((line = reader.readLine()) != null) { 
      if (pattern.matcher(line).matches()) { 
       inConfig = true; 
      } 
      if (inConfig) { 
       System.out.println(line); 
      } 
      if (line.startsWith("}")) { 
       inConfig = false; 
      } 
     } 
    } 

}