![](/img/trans.png)
[英]How to find multiple files, check for duplicates and replace with bash,sed script
[英]Running multiple find and sed in a bash file
我有下面的代码
find . -type f -exec sed -i 's#<![endif]>##g' {} +
find . -type f -exec sed -i 's#<script src="/js/vendor/modernizr-2.6.2.min.js?v=201425100529"></script>##g' {} +
find . -type f -exec sed -i 's# <!--[if lt IE 9]>##g' {} +
在bash文件中。
如果我直接在终端中运行这些行,则可以,但是如果我在一个sh文件中一起运行它们,则会出现错误:
查找:缺少'-exec'的参数
command
执行成功但script
失败的原因是:
当脚本被执行的find
为在当前执行路径中的所有文件和目录的命令搜索(如.
在使用find
)。 同样,这还包括script
本身。 这将创建要被sed
覆盖/修改的脚本。
因此,当需要进行文件编辑时,不必将脚本保存在同一目录中,而是可以将脚本保存在其他目录中,并可以将absolute path
提供给find
命令。
并且还建议使用\\;
终止命令\\;
表示参数的结尾。
始终使用bash
而不是sh
来执行脚本,这意味着bourne shell
。 通常bash
是sh
的符号链接,但它将以兼容模式运行,这会导致bash
失去现代功能。
#!/bin/bash
find /Absolute/path -type f -exec sed -i 's#<!\[endif\]>##g' '{}' \;
find /Absolute/path -type f -exec sed -i 's#<script src="/js/vendor/modernizr-2.6.2.min.js?v=201425100529"></script>##g' '{}' \;
find /Absolute/path -type f -exec sed -i 's# <!--\[if lt IE 9\]>##g' '{}' \;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.