使用GREP查找表标签

时间:2014-10-23 17:56:47

标签: bash grep

我尝试在大型目录中搜索包含任何.html标记的任何<table>个文件。 grep命令似乎是最合适的,但是我在确定要传递的参数时遇到了一些麻烦。

目前我有:grep -r -l "^<table>$" /directory_to_search_through

我使用-r以递归方式搜索所有文件,使用-l仅打印文件名。但是,当前字符串规范专门搜索<table>,但我想进行更全面的搜索,其中包括任何包含id,类等的表标记。此外,我只想搜索.html文件,但指定目录为/directory/*.html会产生一个&#39;没有这样的文件或目录&#39;信息。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

为了可靠地执行此操作,您确实需要使用真正的HTML解析器。如果它是xhtml,那么XML解析器也可以。

您可以通过以下方式获得所需结果的近似值:

find /directory/to/search -name '*.html' | xargs grep -l '<table[ \t>]'

这将检查以.html为根的目录树中的所有/directory/to/search个文件,在行的任何位置标识包含<table>开始标记(的开头)的文件,但是它还可以识别误报,例如CDATA部分内的文本<table(如果实际上该文件包含XHTML)。

答案 1 :(得分:0)

正如您已经发现的那样,grep不是理想的工具。如果您的输入是格式良好的XHTML,则可以使用XML解析器,例如xmlstarlet:

xmlstarlet sel -t -m //table -f -o " table id:" -v "@id" -o " class:" -v "@class" -n *.html

这只是选择所有<table>元素,并提取它们的id,类和找到它们的文件的名称。

例如:

$ cat file.html
<html>
<body>
<table id="abc" class="something">
</table>
</body>
</html>
$ cat file2.html
<html>
<body>
<table id="def" class="something-else">
</table>
</body>
</html>
$ xmlstarlet sel -t -m //table -f -o " table id:" -v "@id" -o " class:" -v "@class" -n *.html
file.html table id:abc class:something
file2.html table id:def class:something-else