Regex 如何使文件中的数据按顺序排列?

Regex 如何使文件中的数据按顺序排列?,regex,bash,csv,sed,spreadsheet,Regex,Bash,Csv,Sed,Spreadsheet,我有一个testfile.txt,如下所示 /path/ 345 firstline /path2/ 346 second line /path3/ 347 third line having spaces /path4/ 3456 fourthline /path/,345,firstline /path2/,346,second line /path3/,347,third line having spaces /path4/,3456,fourthli

我有一个testfile.txt,如下所示

/path/        345 firstline
/path2/     346     second line
/path3/ 347   third line having spaces
/path4/  3456 fourthline
/path/,345,firstline
/path2/,346,second line
/path3/,347,third line having spaces
/path4/,3456,fourthline
现在我想做如下

/path/        345 firstline
/path2/     346     second line
/path3/ 347   third line having spaces
/path4/  3456 fourthline
/path/,345,firstline
/path2/,346,second line
/path3/,347,third line having spaces
/path4/,3456,fourthline
根据上述输出,数据应该由3列组成,所有列之间用逗号分隔。输入文件中的列之间可能有一个或多个空格。例如

/path/3456

也可以由两个选项卡分隔。第三列按原样包含空格


有人能帮我吗?

您可以使用
sed
命令来实现这一点:

我试过这个,它对我有效:

sed 's/[ \t]\+/,/' testfile.txt | sed 's/[ \t]\+/,/'
它仅替换文件中空格或制表符的第一个和第二个实例


更新

sed
(流编辑器)使用命令执行编辑。第一个参数
“s/[\t]\+/,/”
是用于将一个表达式替换为另一个表达式的命令。进一步拆分此命令:

语法:s/expression1/expression2/

当运行上述命令时,在每一行上都会替换表达式的第一个实例。因为还需要替换第二个分隔符,所以我将第一个
sed
命令的输出通过管道传输到另一个类似的命令。这将第二个分隔符替换为



希望这有帮助

tr-s''谢谢,它正在按预期工作。您能详细介绍一下该命令的工作原理吗?
tr -s ' ' <data |sed -e 's/\s/,/' -e  's/\s/,/'
/path/,345,firstline
/path2/,346,second line
/path3/,347,third line having spaces
/path4/,3456,fourthline