2016-10-04 69 views

回答

2

试试这个:

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

如:

[email protected]:/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 

如:

[email protected]:/tmp$ ./test.sh 
abc pqr\$$v_val xyz 
+0

该命令应该是:sed's/\ $ \\\\ $ \ $/g' – Dez

+0

以及如何分配echo'abc pqr $ v_val xyz'| sed的/ \ $/\\ $$/g'变量 – user6615476

+0

@ user6615476:我更新了ans。我希望这可以帮助你; –

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

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

echo $output #a\$$b 
0

如果你用perl,下面的代码将只是做精。

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

如果您正在使用shell并存储在一个shell变量的值,你可以使用sed将同样的效果!

0

由于在您输入的字符串是你还没有告诉我们,我将展示两种可能性:

  1. 很猛砸变量(假设$foo)。然后我们就可以代替,因为我们扩大:

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

    请注意,我们要引用的更换,所以外壳不与进程ID代替$$

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

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

    在这里,我们需要逃避$在模式(因为$比赛结束行的正则表达式),但不更换。


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

相关问题