Распечатать одно слово более одного чартера на новой линии, используя awk, sed, grep

Нашел старую ветку, которая отвечает на мой вопрос, похоже, правильный способ сделать это с помощью db_subst: здесь

-1
29.09.2018, 15:19
2 ответа

Я бы использовал 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 -символом слова, но &не является символом слова, поэтому граница слова бесполезна.

1
28.01.2020, 05:07

Как насчет

sed -r 's/([^ ]{2,}) /\1\n/g' file
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux,

Проверьте, не предшествует ли пробелу 2 или более шаблона пробельных символов, отличных от -, и замените шаблоном «обратная ссылка» плюс <LF>символ.

2
28.01.2020, 05:07

Теги

Похожие вопросы