首先:
我使用的是最新的 OSX,可以使用 CotEditor 和 KompoZer 编辑 HTML 文件。但是,我对 HTML 编辑器总体上不太熟悉 :/
如果必须的话 - 因为您的一个答案非常简单和方便 - 我可以切换到 Win7 机器来完成这项任务。
问题:
我手头有 700 多个 HTML 文件,它们具有相同的基本结构,它们组织在多个表中,我需要从所有表中删除某些内容,这些内容始终由相同的行和标题以及下面内容不断更改的列组成。——如果我可以指定类似“删除顶部单元格中包含例如“名称”的整个列”的内容,那就可以了。此外,我需要删除重复的部分(理论上可以在所有文件中找到并替换这些部分……但是,嗯,以某种方式批量删除)
你能帮我吗?KompoZer 能批量处理吗?或者你还有其他建议吗?谢谢 :)
-----编辑-----
我尝试了 TextWrangler 的批量查找和替换功能,它在查找多个文件中的重复代码方面非常有效,所以我知道如何从每个文件中获取完全相同的部分。这让我不得不改变内容。
有没有办法找到两个重复点之间的内容?例如,如果我知道我想删除的内容前后都是一样的:
<tag> txt_a Content1_to_delete txt_b </tag>
<tag> txt_a Content2_to_delete txt_b </tag>
<tag> txt_a Content3_to_delete txt_b </tag>
所以我需要查找并替换 <tag> txt_a
和 txt_b </tag>
甚至查找并替换从 <tag> txt_a
直到并包括 txt_b </tag>
这是让我很头疼的地方,我真的很需要帮助
-----EDIT2-----
在听了 Gombai Sándor 的回答以及 Dooley_labs 的评论后,我有了一些想法,虽然 sed 变体可以在终端上运行,但我选择了 TextWrangler 来完成这项工作。TextWrangler
可以在多个文件中执行查找和替换,但也可以通过“grep”选项接受正则表达式。我了解了正则表达式,并解决了我的问题。对我来说,“神奇”的是正确使用通配符。尤其是简单的.*
。对于任何想摆弄正则表达式的人,我推荐这个网站,我发现它非常有用:
regexr.com
答案1
最常见的通用 IDE 具有在文件(目录结构内)中(正则表达式)搜索和替换的功能。即使是小型编辑器也倾向于提供此功能;在 Windows 中,NotePad++ 就是一个很好的例子。
对于 OSX,您有常用的 shell 工具,这可能是 sed 的典型任务,它本身就是一个编辑器……一个非常特殊的编辑器。
假设所有文件都位于同一目录中,您可以在该目录中使用它来删除不需要的部分,并将输出放在以 .htm 结尾的文件中(经过一些检查后)您可以将其重命名为 .html。
$ cat just-an-html.html
<tag> txt_a Content1_to_delete txt_b </tag>
<tag> txt_a Content2_to_delete txt_b </tag>
<tag> txt_a Content3_to_delete txt_b </tag>
$ for HTML in *.html; do sed -e 's@\(tag> txt_a\) .*\(txt_b </tag\)@\1 \2@g' $HTML > $(basename $HTML html)htm ; done
$ ls *.htm
just-an-html.htm
$ cat just-an-html.htm
<tag> txt_a txt_b </tag>
<tag> txt_a txt_b </tag>
<tag> txt_a txt_b </tag>
也可以直接删除文件内部的子字符串(-i:inplace),但除非您有最新的备份,否则我不建议这样做。
$ cat just-an-html.html
<tag> txt_a Content1_to_delete txt_b </tag>
<tag> txt_a Content2_to_delete txt_b </tag>
<tag> txt_a Content3_to_delete txt_b </tag>
$ for HTML in *.html; do sed -i -e 's@\(tag> txt_a\) .*\(txt_b </tag\)@\1 \2@g' $HTML ; done
$ cat just-an-html.html
<tag> txt_a txt_b </tag>
<tag> txt_a txt_b </tag>
<tag> txt_a txt_b </tag>