gpt4 book ai didi

sed - 使用sed将每行的多个字段拆分为单独的行,并保留行前缀

转载 作者:行者123 更新时间:2023-12-04 03:38:42 24 4
gpt4 key购买 nike

上周五,我遇到了一个问题,即将文本转换为另一种格式。在那台机器上,只有gnu sed可用,没有awk(奇怪,我知道)。而且我对perl一无所知。所以我正在寻找仅sed的解决方案。

文件内容为:

a  yao.com sina.com
b kongu.com
c polm.com unee.net 21cn.com iop.com foo.com bar.com baz.net happy2all.com
d kinge.net

所需的输出(应该是一个新文件)是:
a  yao.com 
a sina.com
b kongu.com
c polm.com
c unee.net
c 21cn.com
c iop.com
c foo.com
c bar.com
c baz.net
c happy2all.com
d kinge.net

我做了很多尝试,还搜索了著名的sed oneliner,但我做不到……有人可以帮助我吗?

最佳答案

对于sed而言,这并不是一件容易的事,尤其是一个衬垫。但是您提到了“gnu sed”。我看见了灯光!

gnu sed支持s/.../.../ge,在这种情况下非常有用:

kent$  sed -r 's@(^[a-z]+) (.*)@echo "\2"\|sed "s# #\\n\1  #g"\|sed "/^$/d"@ge' file  
a yao.com
a sina.com
b kongu.com
c polm.com
c unee.net
c 21cn.com
c iop.com
c foo.com
c bar.com
c baz.net
c happy2all.com
d kinge.net

简短说明:
  • 外部sed是sed -r 's@..x..@..y..@ge' file ge允许我们将匹配的部分传递给外部命令
  • ..y..部分由ge的魔力完成。我将\2传递给另一个sed(通过echo):sed "s# #\\n\1 #g"此sed将所有空间替换为\n + \1 + space
  • 原始文件中的
  • ,每行(结尾)都有\n,因此第2步(步骤以上)的结果中有空行,我们需要删除这些空行"/^$/d"
  • 最后,可以完成步骤1(外部sed)中的替换,然后得到结果。

  • 检查 info sed中的 s/../../ge
    编辑,在OP注释中添加了 double 空格。

    关于sed - 使用sed将每行的多个字段拆分为单独的行,并保留行前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15454914/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com