2

我正在尝试创建一个用绝对路径替换子字符串的脚本,所以我正在使用

sed s/TEMPDIR/$PWD/ file.py > newfile.py

所以很明显我想用绝对路径替换TEMP,但我一直在

sed: -e 表达式 #1, char 12: `s' 的未知选项

我认为这可能是因为路径包含'/',但我不知道如何解决它。有任何想法吗?

此外,鉴于我不处理链接,deos PWD 保证绝对路径?

谢谢!!

4

1 回答 1

8

使用不同的分隔符:

sed "s@TEMPDIR@$PWD@" file.py > newfile.py

使用 PWD 可能并不能保证绝对路径。(取决于外壳)。但是pwd会返回一个绝对路径,所以使用:

sed "s@TEMPDIR@$(pwd)@" file.py > newfile.py

请注意,如果您的路径包含@. 选择一个两者都没有出现的分隔符。请注意 shell 标准中的以下内容:

在将 PWD 设置为 pwd -P 输出的路径名的情况下,如果当前工作目录或该目录的任何父目录没有足够的权限来确定该路径名是什么,则 PWD 的值为未指定。对此变量的赋值可能会被忽略。如果应用程序设置或取消设置 PWD 的值,则未指定 cd 和 pwd 实用程序的行为。

因此,您可能可以依赖 $PWD。请注意,既不pwd$PWD不会解析符号链接,因此您可能更喜欢使用readlink -f .

于 2012-11-14T18:22:20.733 回答