使用Shell脚本在变量字符串中搜索和替换

时间:2013-09-15 13:04:26

标签: java bash shell unix

我在如何搜索和替换shell脚本变量中的特定字符时陷入困境。

e.g。我有一个条件,我需要将'~'传递给java程序,但我应该将其作为'/~'传递,以避免它被截获为$ HOME。我有一个shell变量,例如$1 = '.-~'我将它作为参数直接传递给Java程序。那么我怎样才能修改这个变量,使它搜索'~',然后找到然后更改$1 = '.-/~',以避免Java程序中的错误。

我试过$(1//~//~),但它给了我一个错误。

这也给了我一个错误。

sed 's#~#/#g' <<< $x;

2 个答案:

答案 0 :(得分:0)

要替换shell变量中的字符串,可以使用如下的var修饰符:

${YOURVAR/The string you want to search/The string you want to replace to}

以示例:

${HOME/~/world} -> "hello ~" become "hello world"

答案 1 :(得分:0)

对于您的两次尝试,您有两种选择:

"${1//\~//~}"  ## ~ in pattern needs to be backslash quoted.

sed 's#~#/~#g' <<< "$x"  ## $x should be placed in double quotes to prevent other word splitting or expansions. And you probably forgot ~.

要替换为\的其他版本:

"${1//\~/\\~}"
sed 's#~#\\~#g' <<< "$x"