没有使用$ PWD与sed,bash

Yot*_*tam 2 bash sed path pwd

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

sed s/TEMPDIR/$PWD/ file.py > newfile.py
Run Code Online (Sandbox Code Playgroud)

显然我想用绝对路径替换TEMP,但我一直在努力

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

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

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

谢谢!!

Wil*_*ell 8

使用不同的分隔符:

sed "s@TEMPDIR@$PWD@" file.py > newfile.py
Run Code Online (Sandbox Code Playgroud)

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

sed "s@TEMPDIR@$(pwd)@" file.py > newfile.py
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的路径包含,这些都不会起作用@.选择一个没有出现的分隔符.请注意shell标准中的以下内容:

如果PWD设置为pwd -P输出的路径名,如果当前工作目录或该目录的任何父目录没有足够的权限,要确定该路径名是什么,PWD的值是不确定的.可以忽略对此变量的赋值.如果应用程序设置或取消设置PWD的值,则不指定cd和pwd实用程序的行为.

所以你可以依靠$ PWD.请注意,既pwd不会也$PWD不会解析符号链接,因此您可能更愿意使用readlink -f .