【shell】sed处理多行合并 |
您所在的位置:网站首页 › grep两行合并成一行 › 【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
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |