Sed 如何在makefile中列出文件和替换模式
我有这样的脚本Sed 如何在makefile中列出文件和替换模式,sed,makefile,Sed,Makefile,我有这样的脚本 #!/bin/sh SHELL_CMD=busybox 并尝试使用makefile替换一些模式来bash shell #!/bin/bash #SHELL_CMD=busybox 以下是Makefile中的过程 release: @rm -rf my_temp/ @mkdir my_temp/ @cp dir1/burn_*.sh dir1/dump_*.sh my_temp/ @cd my_temp/; \ for f in
#!/bin/sh
SHELL_CMD=busybox
并尝试使用makefile替换一些模式来bash shell
#!/bin/bash
#SHELL_CMD=busybox
以下是Makefile中的过程
release:
@rm -rf my_temp/
@mkdir my_temp/
@cp dir1/burn_*.sh dir1/dump_*.sh my_temp/
@cd my_temp/; \
for f in $(shell ls); do \
sed 's:#!/bin/sh\nSHELL_CMD=busybox:#!/bin/bash\n#SHELL_CMD=busybox:1' $${f} > temp; mv temp $${f}; \
done; \
cd ..;
@cd my_temp/; tar -jcv -f bash.tar.bz2 *.sh; cd ..;
我的问题是:
1在for循环中,它没有在for循环中获得正确的脚本名称。
如何修补它
在不匹配源字符串中的换行符的情况下进行替换会更好。除非您准备好执行一些复杂的sed-fu(),否则您只需在每一行上使用 您可以这样做,以便在第一行和第二行上应用该操作。另外,不需要
$(shell ls)
部件。您只需运行一个shell glob表达式即可获得以.sh
结尾的文件
@for f in *.sh; do \
sed -i -e '1 s:#!/bin/sh:#!/bin/bash:1' -e '2 s:^:#:1' $${f} ;\
done
如果您不希望使用
-i
就地替换,请使用最初显示的tmp
文件方法。您最好在不尝试匹配源字符串中的换行符的情况下进行替换。除非您准备好执行一些复杂的sed-fu(),否则您只需在每一行上使用
您可以这样做,以便在第一行和第二行上应用该操作。另外,不需要$(shell ls)
部件。您只需运行一个shell glob表达式即可获得以.sh
结尾的文件
@for f in *.sh; do \
sed -i -e '1 s:#!/bin/sh:#!/bin/bash:1' -e '2 s:^:#:1' $${f} ;\
done
如果您不希望使用-i
就地替换,请使用最初显示的tmp
文件方法