2013-09-25 2 views
-2

необходимо удалить последнее вхождение строки, то есть VirtualHost в файл. Я могу сделать это с помощью java, shell. Структура файла представляет собой XML-файл. Мне нужно, чтобы мне пришлось сдвинуть VirtualHost до конца. Поэтому я пытаюсь удалить его, а затем добавить.Удаление последнего появления строки в файле с помощью java/shell

Current Text: 
    </VirtualHost> 
    #Added for Patch 
    <LocationMatch ^/bea_wls_internal/> 
    RewriteOptions inherit 
    </LocationMatch> 







Desired Text: 
#Added for Patch 
<LocationMatch ^/bea_wls_internal/> 
RewriteOptions inherit 
</LocationMatch> 
</VirtualHost> 

я пытался сделать это:

int c=1,i=1; 
    int loc[]=new int[10]; 
    //String str="</VirtualHost>"; 
    BufferedReader br= new BufferedReader (new FileReader()); 
    String line=br.readLine(); 
    FileWriter fw=new FileWriter(file_location); 
    PrintWriter pw=new PrintWriter(fw); 
    List<String> lines = new ArrayList<String>(); 

    while ((line != null)){ 
      //System.out.println(line); 
      lines.add(line); 
      c++; 
      line=br.readLine(); 
    } 
    br.close(); 
    int size=lines.size(); 
    System.out.println("size "+size); 

    while(c>i){ 
     int filesize=lines.size(); 
     System.out.println(filesize); 

     String str=lines.get(filesize-i); 
     System.out.println(str); 
     lines.remove(filesize-i); 
     if (!lines.equals("</VirtualHost>")){ 
      System.out.println("inside if"); 
      lines.add(str); 
      //break; 
     } 
     else if(lines.equals("</VirtualHost>")){ 
      break; 
     } 
     i++; 
    } 
    for (String writeLine : lines) 
      pw.println(writeLine); 


    pw.append("</VirtualHost>"); 
    pw.flush(); 
    pw.close(); 
    fw.close(); 
    System.out.println(c); 
} 

}

+0

это файл xml – user2814520

+1

AS вашего примера, вы делаете 2 вещи, перекладываете 1 строку и удаляете один ... Который вы хотите? – Rayf

+0

@ Rayf plus, он не удалял ** последнее ** появление, но первый 'LocationMatch ....' – Kent

ответ

0

какой-либо причине вы настаивают на использовании Java?

Вы можете сделать это с помощью СЭД:

sed '/</VirtualHost>/,$d' filename 

Это произведет все содержимое файла минус </VirtualHost>.

Затем просто введите </VirtualHost> в текст вашего #Added for Patch.

0

Использовать XML-парсер, который может предоставить объект java. Затем переходите от корня к нужному элементу, и вы можете выполнять все манипуляции

Смежные вопросы