使用java/shell删除文件中最后出现的字符串

使用java/shell删除文件中最后出现的字符串,java,file,shell,sed,Java,File,Shell,Sed,需要删除文件中最后出现的字符串,即VirtualHost。我可以用java,shell来做。 文件结构是一个xml文件。我需要的是把虚拟主机移到最后。所以我试图删除它,然后追加 Current Text: </VirtualHost> #Added for Patch <LocationMatch ^/bea_wls_internal/> RewriteOptions inherit </LocationMatch>

需要删除文件中最后出现的字符串,即VirtualHost。我可以用java,shell来做。 文件结构是一个xml文件。我需要的是把虚拟主机移到最后。所以我试图删除它,然后追加

 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);
}
intc=1,i=1;
int loc[]=新int[10];
//字符串str=“”;
BufferedReader br=新的BufferedReader(新的文件阅读器());
String line=br.readLine();
FileWriter fw=新的FileWriter(文件位置);
PrintWriter pw=新的PrintWriter(fw);
列表行=新的ArrayList();
while((行!=null)){
//系统输出打印项次(行);
行。添加(行);
C++;
line=br.readLine();
}
br.close();
int size=lines.size();
系统输出打印项次(“尺寸”+尺寸);
而(c>i){
int filesize=lines.size();
System.out.println(文件大小);
String str=lines.get(filesize-i);
系统输出打印项次(str);
删除(filesize-i);
如果(!lines.equals(“”){
System.out.println(“内部if”);
行。添加(str);
//中断;
}
else if(行数等于(“”)){
打破
}
i++;
}
用于(字符串写入线:行)
pw.println(writeLine);
pw.附加(“”);
pw.flush();
关闭();
fw.close();
系统输出打印ln(c);
}

}您坚持使用Java的原因是什么

您可以使用sed执行此操作:

sed '/</VirtualHost>/,$d' filename
sed'/,$d'文件名
这将生成减去
的整个文件内容


然后只需将
包含在为补丁添加的
#文本中。

使用XML解析器,它可以提供java对象。然后从根遍历到所需的元素,您可以执行所有操作

就像您的示例一样,您正在做两件事,移动一行并删除一行。。。你想要哪一个?@Rayf plus,他没有删除最后一个事件,但是第一个
LocationMatch….
我需要删除文件中最后一个出现的VirtualHost,并在最后一个位置移动它。可以使用sed regex完成吗?在我看来,它不像XML。看起来像Apache配置