linux - 在 bash 文件中运行多个查找和 sed

标签 linux bash sed find

我有下面的代码

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 文件中一起运行它们,我会出现错误:

find: missing argument to '-exec'

最佳答案

命令执行成功但脚本执行失败的原因是,

当脚本被执行时,find 命令搜索当前执行路径中的所有文件和目录(如 . 用于 find ).同样,这也包括 script 本身。这将创建要被 sed 覆盖/修改的脚本。

因此,当需要完成文件编辑时,不是将脚本保存在同一目录中,而是可以将脚本保存在其他目录中,并且可以为 提供一个绝对路径 >查找命令。

并且还建议使用\; 终止命令以指示参数结束。

总是使用 bash 来执行脚本而不是 sh ,这意味着 bourne shell 。通常 bash 将是 sh 的符号链接(symbolic link),但它会以兼容模式运行,这会导致 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' '{}' \; 

关于linux - 在 bash 文件中运行多个查找和 sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27102862/

相关文章:

bash - 使用长选项正确使用 bash getopts

bash - 使用 & 符号在后台运行 bash 管道命令

bash - 如何通过命令行将可变文本附加到文件的最后一行?

linux - cat/sed 一个 iOS 可执行文件 - 在 macOS 上出错

sed - 用sed替换2个已知模式之间的可变长度字符串

linux - 使用.sh文件编译源代码中的命令

python - 在 Windows 7 中用冒号 (":") 打开文件名

linux - cd 在并行目录结构之间移动的别名

linux - 在 QT5 中使用 qtmotifextension

linux - Shell,For循环进入目录和子目录未按预期工作