Linux 严格使用sed设置输入文本文件的格式
我有一个名为file.txt的文本文件,内容如下:Linux 严格使用sed设置输入文本文件的格式,linux,sed,Linux,Sed,我有一个名为file.txt的文本文件,内容如下: Name,Height,Width,Area,Colour Rec1,5,10,50,Black Rec2,8,11,88,Red Rec3,9,13,117,Red Rec4,13,16,208,Blue Rec5,15,17,262,Red Rec6,17,19,341,Green Rec7,20,21,430,Black Rec8,22,23,528,Red Rec9,25,25,637,Blue Rec10,27,27,756,Gree
Name,Height,Width,Area,Colour
Rec1,5,10,50,Black
Rec2,8,11,88,Red
Rec3,9,13,117,Red
Rec4,13,16,208,Blue
Rec5,15,17,262,Red
Rec6,17,19,341,Green
Rec7,20,21,430,Black
Rec8,22,23,528,Red
Rec9,25,25,637,Blue
Rec10,27,27,756,Green
Rec11,30,29,885,Black
Rec12,32,31,1023,Blue
Rec13,35,33,1172,Red
Rec14,37,35,1331,Blue
Rec15,40,37,1500,Black
Rec16,42,39,1678,Green
Rec17,45,41,1867,Red
Rec18,47,43,2066,Blue
Rec19,50,45,2275,Black
Rec20,52,47,2493,Red
我需要使用bash脚本对其进行格式化,以便从所附图片中输出,并且几乎只使用linuxsed命令
到目前为止,我想到的是:
sed -n '/Name/{h}; /Rec/{x; s/,/:/g; s/Height.*$//g; p; x; p}' file.txt
试试这个:
sed 1d file.txt | sed -E 's/([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)/Name: \1\tHeight: \2\tWidth: \3\tArea: \4\tColour: \5\t/'
谢谢,
斯特凡试试这个:
sed 1d file.txt | sed -E 's/([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)/Name: \1\tHeight: \2\tWidth: \3\tArea: \4\tColour: \5\t/'
谢谢,
斯特凡
sed
在这方面有点过分了。你不能用awk吗?我知道这有点过分了。最后,我们可以使用其他东西,但理想情况是尽可能多地使用sed。因此,最终它必须是一个sed解决方案,但当然,如果需要,可以使用其他一些工具,如awk。如果您已经知道标题,您可以使用捕获组获取所有五列,并在替换部分使用反向引用。。例如:echo'a,b'| sed-E/([^,]+),([^,]+)/foo:\1\tbaz:\2/”
这就是为什么我要求使用sed:n一些提交给我反馈的草稿,我看到了诸如IFS、for/while/till循环,甚至基于grep和awk的解决方案。所有这些都不是进行作业的正确方式,或者因为作业仅涉及sed而被排除在外。如果这适用于您迄今为止所做的工作,请重新考虑您的方法。理想情况是尽可能多地使用sed
,但是。。为什么?sed
在这方面有点过头了。你不能用awk吗?我知道这有点过分了。最后,我们可以使用其他东西,但理想情况是尽可能多地使用sed。因此,最终它必须是一个sed解决方案,但当然,如果需要,可以使用其他一些工具,如awk。如果您已经知道标题,您可以使用捕获组获取所有五列,并在替换部分使用反向引用。。例如:echo'a,b'| sed-E/([^,]+),([^,]+)/foo:\1\tbaz:\2/”
这就是为什么我要求使用sed:n一些提交给我反馈的草稿,我看到了诸如IFS、for/while/till循环,甚至基于grep和awk的解决方案。所有这些都不是进行作业的正确方式,或者因为作业仅涉及sed而被排除在外。如果这适用于您迄今为止所做的工作,请重新考虑您的方法。理想情况是尽可能多地使用sed
,但是。。为什么?天哪,你就是那个人。万分感谢!工作起来很有魅力!哦,孩子,你就是那个人。万分感谢!工作起来很有魅力!