【发布时间】:2011-09-30 21:56:43
【问题描述】:
我有一个以空格分隔的文件,每行的条目数不定。我想用逗号替换前两个空格,以创建一个逗号分隔的三列文件。
这是我的意见:
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
我也尝试使用 .?通配符,但这对第 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
非常感谢任何帮助!
【问题讨论】:
标签: regex perl parsing command-line sed