2016-10-04 73 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

相關問題