如果ruby
可用,您可以执行以下操作
ruby -e 'puts readlines.join[/(?<=<tr>).+(?=<\/tr>)/m].gsub(/<\/?tr>/, "")' file
file
您输入的html文件在哪里。该命令执行一个Ruby单一代码行。首先,它从中读取所有行file
并将它们连接到字符串readlines.join
。然后,它从字符串中选择介于(但不包括)之间的任何字符,<tr>
并且<\/tr>
该字符是一个字符或更长,而与换行符无关[/(?<=<tr>).+(?=<\/tr>)/m]
。然后,它从字符串中删除任何字符串<tr>
或</tr>
字符串gsub(/<\/?tr>/, "")
(这对于处理嵌套tr
标签是必需的)。最后,它输出字符串puts
。
您说过不应该为您使用html解析器,但是将Nokogiri与之一起使用非常容易,ruby
并且使命令更简单。
ruby -rnokogiri -e 'puts Nokogiri::HTML(readlines.join).xpath("//tr").map { |e| e.content }' file
-rnokogiri
加载Nokogiri。Nokogiri::HTML(readlines.join)
读取的所有行file
。xpath("//tr")
选择每个tr
元素并map { |e| e.content }
选择每个元素的内容,即<tr>
和之间的内容</tr>
。
'/<tr/{p=1}; p; /<\/tr>/{p=0}'
。如果不起作用,请张贴一些示例输入和预期输出。