【发布时间】:2017-02-12 04:45:15
【问题描述】:
我正在尝试在 makefile 中使用 sed,如下所示。但它似乎不会产生修改后的文件。我已经在 shell 中尝试了 sed 命令并确保它可以正常工作。
ana:
-for ana1 in $(anas) ; do \
for ana2 in $(anas) ; do \
sed "s/STF1/$$ana1/g" ./planalysis/src/analysis.arr > ./planalysis/src/spanalysis.arr ; \
sed "s/STF2/$$ana2/g" ./planalysis/src/spanalysis.arr > ./planalysis/src/spanalysis.arr ; \
# ... perform some analysis with the modified file..
# ...
done \
done
是不是我做错了什么?
【问题讨论】:
-
我认为 make 可能不是用于此目的的工具。 Make 用于描述如何将一个或多个文件转换为输出文件。 ana: 输出没有明确地与任何输入文件相关联。一个简单的 bash 脚本应该可以正常工作。如果您想让 make 告诉何时运行 bash 脚本,那么就这样做,但不要破坏 make 来执行循环逻辑。 Make 应该是这样的:ana 依赖于 x y 和 y。您可以使用 x y 和 z 并从中制作 ana。
-
您可以将两个 sed 命令合并为一个:
sed -e "s/STF1/$$ana1/g" -e "s/STF2/$$ana2/g" ./planalysis/src/analysis.arr > ./planalysis/src/spanalysis.arr。这将提高性能并解决在您的第二个sed调用中覆盖输入流的问题。
标签: bash for-loop sed makefile gnu-make