Разбить строки

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Skyfery
Сообщения: 1

Разбить строки

Сообщение Skyfery » 08.06.2014 20:59

Задание такое: В заданном текстовом файле оставить не более 3 слов в каждой строке, остаток перенести в следующую строку.
Пробовал такую команду:

Код:

sed -E -i 's/\ /\n/3' ./text

Вот исходный файл:
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1

В результате выполнения скрипта получается такое:
1 2 3
4 5 6 7 8 9
9 8 7
6 5 4 3 2 1

Что нужно поправить в команде, что бы получилось так, как требуется по заданию?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15809
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Разбить строки

Сообщение Bizdelnick » 08.06.2014 21:30

Я бы сделал так: s/\([^ ]\+ [^ ]\+ [^ ]\+ \)/\1\n/g
При условии, что слова всегда разделяются одним пробелом, конечно.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4666
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Разбить строки

Сообщение SLEDopit » 09.06.2014 01:23

либо чуть короче:

Код: Выделить всё

s/\(\([^ ]\+ \)\{3\}\)/\1\n/g

Skyfery писал(а):
08.06.2014 20:59
's/\ /\n/3'
3 здесь означает не "каждый третий", а "все после третьего, включая третий".
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали: