我想搜索变量并用文件中的绝对路径替换。
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 :(得分:1)
如果您确实想要使用替换字符串中变量的值,可以使用
sed "s#\${ABC}#$ABC#g" file.txt
答案 1 :(得分:1)
s
中sed
之后的字符是分隔符,它可以是您选择的任何一个字符,只要它不在string-to-be-matched
和string-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
答案 2 :(得分: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
之后的第一个字符将用作替换表达式中的分隔符(即's@foo@bar@g'
)