如何修改sed、grep命令 将匹配文本格式化为指定结构HTML表格

现有命令
当前使用的处理命令存在逻辑问题,无法按要求分组输出表格:
grep -rlZ "$pattern" /path/of/file/ | xargs -0 grep -rZ "$pattern" | sed -e 's~.*=\(.*\)~<tr><td>\1</td></tr>~;1i\<html><table border="1">' -e '$a\</table>\n</html>`;
规则说明
需要修改上述sed逻辑,满足以下要求:
- 源数据为
key==value格式,每5条连续数据为一组 - 每组数据的所有value放在同一个
<tr>标签内,单个value用独立<td>标签包裹 - 最终输出完整合法的带边框HTML表格结构
待处理源数据示例:
name==ABC City==Rohini State==Delhi Age==18 Country==India
预期输出格式:
<html><table border="1"> <tr><td>Aastha</td> <td>Rohini</td> <td>Delhi</td> <td>20</td> <td>India</td> </tr> <tr> <td>Aastha</td> <td>Dwarka</td> <td>Delhi</td> <td>20</td> <td>India</td> </tr> </table> </html>
修改后可用命令
grep -rlZ "$pattern" /path/of/file/ | xargs -0 grep -rhZ "$pattern" | sed ' s/.*==\(.*\)/ <td>\1<\/td>/ 1~5i\ <tr> 5~5a\ </tr> 1i\<html><table border="1"> $a\</table>\n</html> '
改动点说明
- 给xargs调用的grep增加
-h参数,屏蔽多文件匹配时自带的文件名:前缀,避免取值错误,同时删除原命令末尾多余的反引号语法错误 - 删除原sed逐行套
<tr>的逻辑,改用步长匹配规则:每5行为一组,组首插入<tr>开标签,组尾插入</tr>闭标签 - 调整取值匹配规则,适配源数据
==的双等号分隔符,只提取等号后的value值包装为<td>标签 - 保留首尾插入HTML、表格框架标签的逻辑,保证输出结构完整合法
内容的提问来源于stack exchange,提问作者aastha
相关产品推荐
相关产品推荐

