【shell】sed处理多行合并
有这么一个题
文件格式 table=t1 name owner address table=t2 id text col1 comment col5 table=t3 prod_name price 要求按table=关键字,将相同的table的列放在同一行,结果为: table=t1 name owner address table=t2 id text col1 comment col5 table=t3 prod_name price 另外要求只能用sed
这题我的的想法是先用xargs去掉所有的换行符,然后用sed把table替换成\ntable。
可以题目中要求了只能用sed,所以本题的核心就是sed合并行。
怎么用sed合并行,我用到了保持空间,步骤如下:
1.如果是第一行,把模式空间替换到保持空间;
2.如果不是第一行,把模式空间追加到保持空间;
3.如果是最后一行,把保持空间的内容替换到模式空间;
4.通过-n,只输出模式空间最后一行的内容;
通过这四步,最后一行就变成了 table=t1 name owner address \n table=t2 id text col1 comment col5 \n table=t3 prod_name price,去掉\n 就完成了行的合并。
参考代码如下:
[root]$ cat sedMerge.txt table=t1 name owner address table=t2 id text col1 comment col5 table=t3 prod_name price [root]$ cat sedMerge.txt | sed -n '1h;1!H;$g;s/\n/ /g;s/table/\ntable/g;$p' | sed '/^$/d' table=t1 name owner address table=t2 id text col1 comment col5 table=t3 prod_name price
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具