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

请给我一些关于这个问题的建议。

谢谢你。

4

3 回答 3

1

sin 之后的字符sed是分隔符,它可以是您选择的任何一个字符,只要它不在 and 中,它就可以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

于 2013-10-11T11:39:49.870 回答
1

如果您真的想在替换字符串中使用变量中的值,您可以使用

sed "s#\${ABC}#$ABC#g" file.txt
于 2013-10-10T11:44:38.663 回答
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'

于 2013-10-11T11:45:25.140 回答