2013-10-10 69 views
0

我想要搜索變量並將其替換爲文件中的絕對路徑。如何用文件中的絕對路徑替換變量值?

setenv ABC /home/xyz 
cat file.txt 
${ABC}/Test/Folder_1 
${ABC}/Test/Folder_2 

我想用/ home/xyz替換所有的$ {ABC}。 我試圖通過後述的方式,但不工作,

sed -i 's/\$ABC/echo $ABC/g' file.txt 

我可以通過下文提到的方式做,但我不想做這樣的。(我必須把這麼多回斜線)

$ echo $ABC | sed -i 's/\$ABC/\/home\/xyz/g' file.txt 

請給我一些關於這個問題的建議。

謝謝。

+0

'setenv'不是'bash'命令。 – chepner

回答

1

如果你真的想從您的替換字符串變量使用的值,你可以在seds後使用

sed "s#\${ABC}#$ABC#g" file.txt 
1

字符是分隔符,也可以是你的選擇,它的任何一個字符只要它不在string-to-be-matchedstring-to-be-replaced中。

實施例:

sed 's:string-to-be-matched:string-to-be-replaced:g' file-to-be-edited

:是分隔符

g裝置全局替換。


在你的情況下,作爲string-to-be-replaced包含/,同樣使用的是作爲SED分隔符。

簡單的解決方案將是:

sed -i 's:${ABC}:'"$ABC"':g' fill.txt 

'"是在$兩端ABC替換字符串。目的是擴大shell變量與sed

0

另一種方式去獲取絕對路徑是readlink -f ${ABC}/Test/Folder_2

或者perl的替代你的斜線餓命令

$ echo $ABC | sed -i 's/\$ABC/\/home\/xyz/g' file.txt 

$ echo $ABC | perl -p -i -e 's!\$ABC!/home/xyz!g' 

上面的's之後的第一個字符將被用作替換表達式中的分隔符(即,即'[email protected]@[email protected]'

相關問題