在Unix中,如何在字符串中用$替换$

时间:2016-10-04 13:48:06

标签: unix replace

我有一个这种格式的字符串:

'abc pqr$v_val xyz'. 

如何将$替换为\$$?我希望我的最终输出是:

'abc pqr\$$v_val xyz'

4 个答案:

答案 0 :(得分:2)

试试这个:

echo 'abc pqr$v_val xyz' | sed 's/\$/\\\$\$/g'

例如:

user@host:/tmp$ echo 'abc pqr$v_val xyz' | sed 's/\$/\\\$\$/g'
abc pqr\$$v_val xyz

分配变量;

#!/bin/bash
var=$(echo 'abc pqr$v_val xyz' | sed 's/\$/\\\$\$/g')
#var=`echo 'abc pqr$v_val xyz' | sed 's/\$/\\\$\$/g'` # you can also use this

echo $var

例如:

user@host:/tmp$ ./test.sh
abc pqr\$$v_val xyz

答案 1 :(得分:1)

input="a\$b"  #input is a$b

dollar="\$"
doubleDollar="\\\$\$"
output="${input/$dollar/$doubleDollar}"

echo $output #a\$$b

答案 2 :(得分:0)

如果您使用的是perl,以下代码就可以了。

$str1 = 'abc pqr$v_val xyz' ;
$str1 =~ s/\$/\\\$\$/g ;

如果你使用Shell和存储在shell变量中的值,你可以使用sed来达到同样的效果!

答案 3 :(得分:0)

由于您没有向我们展示输入字符串的位置,我将展示两种可能性:

  1. 它在一个Bash变量中(比方说$foo)。然后我们可以在扩展时替换:

    echo "${foo//$/'\$$'}"
    

    请注意,我们必须引用替换,因此shell不会将$$替换为进程ID。

  2. 它是来自文件或其他流的输入。然后我们可以使用sed作为过滤器:

    sed -e 's/\$/\\$$/g'
    

    在这里,我们需要在模式中转义$(因为$匹配正则表达式中的行尾)但不在替换中。

  3. 注意:这两个都替换了输入中的所有$;如果您只想替换第一个匹配项,则需要在第一个示例中使用/而不是//,或者在第二个示例中省略g