Я бы использовал Perl -ароматизированное регулярное выражение здесь:
$ echo "$s" | grep -Po '((^|\s)\K\S\s+)?\S{2,}'
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux,
Вы можете сделать то же самое с расширенным регулярным выражением, но, поскольку у него нет обходных путей pcre, вы в конечном итоге захватите начальный пробел:
$ echo "$s" | grep -Eo '((^|[[:blank:]])[^[:blank:]][[:blank:]]+)?[^[:blank:]]{2,}'
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux,
Я хотел бы использовать маркер границы слова перед 1 -символом слова, но &
не является символом слова, поэтому граница слова бесполезна.
Как насчет
sed -r 's/([^ ]{2,}) /\1\n/g' file
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux,
Проверьте, не предшествует ли пробелу 2 или более шаблона пробельных символов, отличных от -, и замените шаблоном «обратная ссылка» плюс <LF>
символ.