Заменить первые два пробела запятой с помощью 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

И вот мой желаемый результат:

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

Я пытаюсь использовать регулярные выражения Perl в sed, но я не могу заставить ее работать. Сначала я пытаюсь захватить слово, за которым следует пробел, затем другое слово, но это работает только для строк 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

Любая помощь приветствуется!

6
задан Svante 8 July 2011 в 09:36
поделиться