使用sed用逗号替换前两个空格

Ste*_*ner 6 regex perl command-line parsing sed

我有一个以空格分隔的文件,每行有一个可变数量的条目.我想用逗号替换前两个空格来创建一个包含三列的逗号分隔文件.

这是我的意见:

a b  1 2 3 3 2 1
c d  44 55 66 2355
line http://google.com 100 200 300
ef jh  77 88 99
z y 2 3 33
Run Code Online (Sandbox Code Playgroud)

这是我想要的输出:

a,b,1 2 3 3 2 1
c,d,44 55 66 2355
line,http://google.com,100 200 300
ef,jh,77 88 99
z,y,2 3 33
Run Code Online (Sandbox Code Playgroud)

我正在尝试在sed命令中使用perl正则表达式,但我无法让它工作.首先我尝试捕获一个单词,然后是空格,然后是另一个单词,但这仅适用于第1,2和5行:

$ cat test | sed -r 's/(\w)\s+(\w)\s+/\1,\2,/'
a,b,1 2 3 3 2 1
c,d,44 55 66 2355
line http://google.com 100 200 300
ef jh  77 88 99
z,y,2 3 33
Run Code Online (Sandbox Code Playgroud)

我也尝试捕获空格,一个单词,然后是更多的空格,但这给了我相同的结果:

$ cat test | sed -r 's/\s+(\w)\s+/,\1,/'
a,b,1 2 3 3 2 1
c,d,44 55 66 2355
line http://google.com 100 200 300
ef jh  77 88 99
z,y,2 3 33
Run Code Online (Sandbox Code Playgroud)

我也试着这样做.?通配符,但这对第4行做了一些有趣的事情.

$ cat test | sed -r 's/\s+(.?)\s+/,\1,/'
a,b,1 2 3 3 2 1
c,d,44 55 66 2355
line http://google.com 100 200 300
ef jh,,77 88 99
z,y,2 3 33
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢!

Fli*_*mzy 7

这个怎么样:

sed -e 's/\s\+/,/' | sed -e 's/\s\+/,/'
Run Code Online (Sandbox Code Playgroud)

这可能是单个sed命令,但这肯定是一个简单的方法:)

我的输出:

a,b,1 2 3 3 2 1
c,d,44 55 66 2355
line,http://google.com,100 200 300
ef,jh,77 88 99
z,y,2 3 33
Run Code Online (Sandbox Code Playgroud)