我正在 Virtual Box 中运行 Web 服务器来测试一些项目。我注意到一些 html 文件包含这些不需要的行。我想从多个 html/htm 文件中删除这些代码行,因此我这样做了:
find /Desktop/TEST_REMOVAL3/ -name '*.html' -or -name '*.htm' -or -name '*.php' | sed -i "/<SCRIPT Language=VBScript>/,/ //--></SCRIPT><!-- /d"
<SCRIPT Language=VBS>
到目前为止,第一部分(查找/找到所有 html 文件)可以正常工作。我需要删除从到开始</SCRIPT>
的行的部分sed
失败了 :D
我会尝试再次弄清楚,同时等待您的建议和对我错在哪里的责骂:D
答案1
如果您想使用文件列表作为命令find
的参数sed
(而不是作为输入,这是您的行正在做的事情),您必须使用以下命令xargs
:
find dir -name '*.html' | xargs -d \\n sed -i "COMMANDS"
在这种情况下,xargs
采用文件列表,使用换行符(\n
)作为文件名之间的分隔符,并sed
以它们作为参数开头。
或者使用-exec
查找选项:
find dir -name '*.html' -exec sed -i "COMMANDS" {} +
在这种情况下,将在和find
之间运行命令,同时替换文件名(列表)。还有-exec
+
{}
find dir -name '*.html' -exec sed -i "COMMANDS" {} \;
其功能基本相同,但sed
为每个文件名启动一个新的。