转义sed字符java不工作

转义sed字符java不工作,java,string,unix,sed,escaping,Java,String,Unix,Sed,Escaping,我首先要说的是,我发现了很多与我类似的话题,但没有一个能给我提供正确的答案 我正在尝试使用以下shell脚本将字符串插入xml文件: #!/bin/bash cd /var/lib/tomcat7/webapps/Config || exit sudo sed -i '/<\/home>/i <entry>'"$@"'</entry>' data.xml 执行代码时,我的xml文件如下所示: <home> <entry>te

我首先要说的是,我发现了很多与我类似的话题,但没有一个能给我提供正确的答案

我正在尝试使用以下shell脚本将字符串插入xml文件:

#!/bin/bash
cd /var/lib/tomcat7/webapps/Config || exit 
sudo sed -i '/<\/home>/i <entry>'"$@"'</entry>' data.xml
执行代码时,我的xml文件如下所示:

<home>
    <entry>test entry</entry>
</home>
<home>
    <entry>"test
</home>
它适用于没有空格的字符串,因此脚本只有1个参数

提前感谢

试试这个:

package org.script.test;

import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        if (args.length != 1) {
            System.out.println("Invalid arguments");
            return;
        }
        String entry="\"" +args[0]+ "\"";
        System.out.println("adding: " + entry);

        Process pr = null;
        try {
            pr =
 Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "cd /home/oracle/testscript ; . ./test.sh " + entry });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
召集人:

假设包org.script.test

即使您不传递参数,它仍然有效:

package org.mihai.script;

import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        String entry = "test entry 2";
        System.out.println("adding: " + entry);

        Process pr = null;
        try {
            pr =
 Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "cd /home/oracle/testscript ; . ./test.sh " + "\"" + entry +"\"" });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
电话:

Output data.xml:

<home>
<entry>test entry</entry>
<entry>test entry 2</entry>
</home>

谢谢你的回复!但是我担心在执行了新代码之后,我尝试了两种解决方案,我的新xml看起来是这样的:所以我猜参数没有被传递……你能试着将脚本更改为不使用sudo吗?这是我用来测试的脚本,它工作得很好:/bin/bash sed-i'//i'$@data.xml我不想问,但是您是否更改了字符串以匹配路径和脚本名?我在示例中保留了在我的机器上使用的那些。我发现了问题,并替换了:cd/home/oracle/testscript/test.sh+\+entry+\into/home/oracle/testscript/test.sh+\+entry+\非常感谢您的回复/回答!!!
java -Xms128M -Xmx128M -classpath testScript.jar org.script.test.Main "test entry"
package org.mihai.script;

import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        String entry = "test entry 2";
        System.out.println("adding: " + entry);

        Process pr = null;
        try {
            pr =
 Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "cd /home/oracle/testscript ; . ./test.sh " + "\"" + entry +"\"" });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
java -Xms128M -Xmx128M -classpath testScript.jar org.mihai.script.Main
<home>
<entry>test entry</entry>
<entry>test entry 2</entry>
</home>