逃避sed字符java无法正常工作

时间:2014-11-24 14:00:25

标签: 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

当执行这样的脚本./script.sh&#34; test entry&#34;时,我的xml文件将如下所示:

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

这就是我想要的。但是,当我尝试通过java调用此脚本时,我无法成功地转义引号。

我的java代码是这样的:

String entry = "test entry";
String command = "/home/user/addentry.sh " + "\"" + entry + "\"";
Process p = null;
Runtime run = Runtime.getRuntime();
    try {            
        p = run.exec(command);
    }     
    .....   

执行代码时,我的xml文件如下所示:

<home>
    <entry>"test
</home>

正如您所看到的,引用也是作为我输入的一部分传递的。 将java代码更改为:

String command = "/home/user/addentry.sh " + entry;

它适用于没有空格的字符串(因此脚本只有1个参数)

提前致谢

1 个答案:

答案 0 :(得分:0)

试试这个:

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

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

输出data.xml:

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