在java中转义特殊字符以调用sed

时间:2013-12-02 10:21:00

标签: java sed

在我的Java应用程序中,我需要修改远程属性文件。 此文件通过SSH访问,目前通过调用远程服务器上的sed进行修改。

我的问题是要修改的属性文件包含由特殊字符(例如密码)组成的项目。需要对这些特殊字符进行转义,以便正确修改属性的值。

我的问题是:有没有比逃避每一个特殊角色更好的方法?有没有一种方法可以逃脱所有特殊字符?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

之类的东西?

MyString="[some*char+and.word\\with/cntrl]"
printf "%s""${MyString}" | sed 's|\\|\\&|g;s|[][*.?/]|\\&|g' | read -r MyString

# printf "%s\n" "${MyString}"
\[some\*char+and\.word\\with\/cntrl\]

答案 1 :(得分:0)

我最终决定使用那段代码逃避每一个问题:

// Replace backslashes first, as it is used for escaping
myVar = myVar.replaceAll(Pattern.quote("\\"), "\\\\\\\\");

// Then replace all the other special characters
myVar = myVar.replaceAll(Pattern.quote("/"), "\\\\/");
myVar = myVar.replaceAll(Pattern.quote("&"), "\\\\&");
myVar = myVar.replaceAll(Pattern.quote("$"), "\\\\\\$");
myVar = myVar.replaceAll(Pattern.quote("'"), "'\"'\"'");