Regex 使用SED从“x=a1,y=b1,z=c1”类型的文件中提取标题和数据

Regex 使用SED从“x=a1,y=b1,z=c1”类型的文件中提取标题和数据,regex,sed,Regex,Sed,数据文件如下所示: x=a1, y=b1, z=c1 x=a2, y=b2, z=c2 ... 我想将其解析为更有用的格式: x y z a1 b1 c1 a2 b2 c2 ... 标题x、y、z和数据a、b、c不包含=或 使用 给我 x y z=c1 显然最后一项与[,$]不匹配,有什么建议吗 非常感谢 Dong该[,$]匹配逗号或美元,而不是逗号或行尾 在第一行执行两个操作可能是最简单的: sed -e '1{ s/=[^,]*,//g; s/=.*//; }' ..

数据文件如下所示:

x=a1, y=b1, z=c1
x=a2, y=b2, z=c2
...
我想将其解析为更有用的格式:

x   y   z
a1  b1  c1
a2  b2  c2
...
标题x、y、z和数据a、b、c不包含=或

使用

给我

 x y z=c1
显然最后一项与[,$]不匹配,有什么建议吗

非常感谢

Dong

该[,$]匹配逗号或美元,而不是逗号或行尾

在第一行执行两个操作可能是最简单的:

sed -e '1{ s/=[^,]*,//g; s/=.*//; }' ...
第一个查找等号和第一个逗号之间的所有内容,包括分隔符,并重复删除它;第二个查找最后一个等号之后的所有内容并删除该等号。

[,$]匹配逗号或美元,而不是逗号或行尾

sed -i 's/[^=]*=\([^,]*\)/\1 /g'
在第一行执行两个操作可能是最简单的:

sed -e '1{ s/=[^,]*,//g; s/=.*//; }' ...
第一个查找等号和第一个逗号之间的所有内容,包括分隔符,并重复删除它;第二个查找最后一个等号之后的所有内容,并删除该等号

sed -i 's/[^=]*=\([^,]*\)/\1 /g'
应该能够将所有数据转换成这种格式

a1  b1  c1
a2  b2  c2
... 
之后,您可以使用插入您选择的标题

sed -i 1i"header"
如果需要,还可以使用Jonathan Leffler答案中的sed解析文件头

应该能够将所有数据转换成这种格式

a1  b1  c1
a2  b2  c2
... 
之后,您可以使用插入您选择的标题

sed -i 1i"header"

如果需要,还可以使用Jonathan Leffler答案中的sed解析文件头

要将文件解析为CSV

 s/=[^,]*//g

 s/[^,]*=//g

分别给出标题和数据。

要将文件解析为CSV

 s/=[^,]*//g

 s/[^,]*=//g

分别给出标题和数据。

Jonathan,非常好!你也解释得很清楚,非常感谢一个新手。是的,我的问题是[逗号,行尾]匹配。一个相关的问题是,你如何去掉=a1并保留逗号,这样结果将是一个CSV文件?在StackOverflow和相关网站上表示感谢的标准方式是向上投票或接受答案,或者两者都查看。您可以通过单击答案旁边的向上箭头向上投票;您可以通过单击某个问题答案旁边的勾号复选标记来接受。请注意,当您接受其他人的答案时,您的声誉会得到一点提升。当前为空的替换字符串应更改为逗号,以获得类似CSV的输出。Jonathan,非常好!你也解释得很清楚,非常感谢一个新手。是的,我的问题是[逗号,行尾]匹配。一个相关的问题是,你如何去掉=a1并保留逗号,这样结果将是一个CSV文件?在StackOverflow和相关网站上表示感谢的标准方式是向上投票或接受答案,或者两者都查看。您可以通过单击答案旁边的向上箭头向上投票;您可以通过单击某个问题答案旁边的勾号复选标记来接受。请注意,当您接受其他人的回答时,您的声誉会得到一点提升。当前为空的替换字符串应更改为逗号,以获得类似CSV的输出。sed-e的/[^=]*\[^,]*\/\1/g'gives=a1=b1=c1sed-e的/[^=]*\[^,]*\/\1/g'gives=a1=b1=c1