我正在尝试用子目录中的脚本调用替换脚本调用。
例如,最初我有 ./output.sh
在我的脚本中调用 output.sh
当前目录中的脚本。
我想替换./output.sh
与 ../output.sh
这样它就可以调用 output.sh
在父目录中。
我试过了
sed -i -e 's/../\output.sh/./\output.sh/g' scriptName.sh
这会返回
char 17: unknown option to 's'
任何有关 sed 转义字符语法的帮助都会很棒。
最佳答案
Sed 在这方面表现不佳;如果您不小心,您将面临将现有的 ../output.sh
转换为 .../output.sh
的风险。
这是 sed 能做的最好的事情:
sed -i 's@output\.sh@../$@g' scriptName.sh
(我使用 @
代替 /
,这样就没有要转义的正斜杠。Sed 接受任何标点符号字符来代替正斜杠。)
请注意,这会将 ../output.sh
转换为 ../../output.sh
但至少不会产生三点错误。
相反,尝试 perl:
perl -pie 's@(?<!\.\./)(output\.sh\b)@../$1@g' scriptName.sh
这使用负向后查找来确保它不会遍历到父级的父级。它还允许使用 \b
来表示分词,以防万一您在某处有类似 output.shelf
的内容。
关于带有转义的 Linux SED 命令语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41491193/