【问题标题】:Search and Replace in a variable string with Shell scripts使用 Shell 脚本在变量字符串中搜索和替换
【发布时间】:2013-09-15 13:04:26
【问题描述】:

我对如何在 shell 脚本的变量中搜索和替换特定字符感到两难。

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

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

这也给了我一个错误。

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

【问题讨论】:

标签: java bash shell unix


【解决方案1】:

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

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

举例:

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

【讨论】:

  • 它不适用于特殊字符:例如${1/~/'/~'} 不起作用
【解决方案2】:

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

"${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"

【讨论】:

    猜你喜欢
    • 2016-10-28
    • 2012-11-02
    • 1970-01-01
    • 2023-03-03
    • 2020-04-29
    • 2015-03-10
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多