有这么一个题

文件格式

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

【shell】sed处理多行合并的更多相关文章

  1. sed初理多行合并+sed之G、H、g、h使用+sed n/N使用说明

    转载:[shell]sed处理多行合并 - seyjs - 博客园 (cnblogs.com) 文件格式 table=t1 name owner address table=t2 id text co ...

  2. Shell脚本统计文件行数

    Shell脚本统计文件行数 转自 http://www.jb51.net/article/61943.htm    示例:row_count.sh文件 awk '{print NR}' row_cou ...

  3. Python3学习之路~2.8 文件操作实现简单的shell sed替换功能

    程序:实现简单的shell sed替换功能 #实现简单的shell sed替换功能,保存为file_sed.py #打开命令行输入python file_sed.py 我 Alex,回车后会把文件中的 ...

  4. 3-1 实现简单的shell sed替换功能

    1.需求 程序1: 实现简单的shell sed替换功能 file1 的内容copy到file2 输入参数./sed.py  $1  $2 $1替换成$2 (把a替换成% ) 2.个人思路 open ...

  5. Shell 打印空行的行号

    目录 Shell 打印空行的行号 题解 Shell 打印空行的行号 写一个 bash脚本以输出一个文本文件 nowcoder.txt中空行的行号,可能连续,从1开始 示例: 假设 nowcoder.t ...

  6. knockoutjs+jquery.gridgroup 实现table数据加载和行合并

    目标 使用ajax获取到json数据后,通过ko绑定到表格,然后通过jquery.gridgroup插件实现行合并,效果如下: 步骤 1.引入插件 <script src="~/Scr ...

  7. mysql 多行合并一列

    mysql  多行合并一列 使用的函数为: GROUP_CONCAT(exp) 其中exp 的参数类似如下: (field order  by field   desc  separator ';') ...

  8. Firebird 同一字段的多行合并为一行

    Firebird 同一字段的多行合并为一行用LIST函数类似于MYSQL的GROUP_CONCAT. 具体用法如下: SELECT  LIST(a.GG_NAME||':'||a.GG_VALUE) ...

  9. (转载)按行合并两个sql的查询结果

    (转载)http://blog.csdn.net/wxwstrue/article/details/6784774 Union all join 是平行合并 为水平连接 Union all 是垂直合并 ...

随机推荐

  1. CSS元素隐藏

    { display: none; /* 不占据空间,无法点击 */ } /*************************************************************** ...

  2. Smartform给文本绑定值

    点击字段显示器, 然后把字段拖过去即可

  3. Elasticsearch 安装 Head 插件

    引子:在上一篇文章Elasticsearch入门(一):CentOS 7.6 安装ES 7.0.0中,我们讲了如何在CentOS 7.6环境下安装 Elasticsearch 7.0.下面,我将讲一讲 ...

  4. 关于vtkCommand的各种事件的解释

    superclass for callback/observer methods vtkCommand is an implementation of the observer/command des ...

  5. Day02:对象和类(下)

    构造方法 什么是构造方法 在类实例化对象时运行的一种特殊的方法 为什么需要构造方法 构造方法适合为对象的属性赋初值 编写构造方法 public 类名(){ //方法体 } 构造方法不写返回值 构造方法 ...

  6. cmd命令简单别木马的蛛丝马迹

    一些基本的Windows命令往往可以识别木马的蛛丝马迹,而且在保护网络安全上起到很大的作用. 检测网络连接 如果你怀疑自己的计算机上被别人安装了木马,或者是中了病毒,但是手里没有完善的工具来检测是不是 ...

  7. 小记-----一些linux操作小操作

    lrzsz工具 window系统与linux系统 文件互传      1.在linux系统命令行:sudo yum install lrzsz  或者  yum install lrzsz (输入一个 ...

  8. 使用git配置ssh的文章推荐

    https://blog.51cto.com/sgk2011/1925922 https://www.cnblogs.com/superGG1990/p/6844952.html https://bl ...

  9. 在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

    最近闲着无聊,买了个树莓派Zero,准备在上面跑.Net Core,来驱动各种传感器 就是上面这货.之前手上已经有一个树莓派3B+,但是介于3B+已经被我挂在路由器旁边当做服务器用,不是很方便拿来研究 ...

  10. sed 删除用法

    sed ‘1,4d’ dataf1 #把第一行到第四行删除,并且显示剩下的内容 sed ‘/La/d’ dataf2 #把含有 La 的行删除 sed ‘/La/!d`’#把不含 La 的行删除,!是 ...