我有一个以空格分隔的文件,每行有不定数量的条目。我想要用逗号替换前两个空格,创建一个有三列的逗号分隔文件。
这是我的输入:
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
以下是我期望的输出:
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
我正在尝试在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
我也尝试捕获空格、单词和更多的空格,但结果仍然相同:
$ 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
我也尝试使用 .? 通配符来做这件事,但是它对第四行代码做了一些奇怪的事情。
$ 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
任何帮助都非常感激!