我有一个这种格式的字符串:
'abc pqr$v_val xyz'.
如何将$
替换为\$$
?我希望我的最终输出是:
'abc pqr\$$v_val xyz'
答案 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)
由于您没有向我们展示输入字符串的位置,我将展示两种可能性:
它在一个Bash变量中(比方说$foo
)。然后我们可以在扩展时替换:
echo "${foo//$/'\$$'}"
请注意,我们必须引用替换,因此shell不会将$$
替换为进程ID。
它是来自文件或其他流的输入。然后我们可以使用sed
作为过滤器:
sed -e 's/\$/\\$$/g'
在这里,我们需要在模式中转义$
(因为$
匹配正则表达式中的行尾)但不在替换中。
注意:这两个都替换了输入中的所有$
;如果您只想替换第一个匹配项,则需要在第一个示例中使用/
而不是//
,或者在第二个示例中省略g
。