Как я могу разделить буквы слова с каждой буквой в отдельной строке?
Например, учитывая, что "StackOver"
я хотел бы видеть
S
t
a
c
k
O
v
e
r
Я новичок в bash, поэтому понятия не имею, с чего начать.
command-line
split
words
Сияан Халлак
источник
источник
Here string
гроссо-модо, эквивалентныйecho foo | ...
просто меньшему количеству печатания. См. Tldp.org/LDP/abs/html/x17837.html.
на\B
(не соответствует границе слова).sed
как:sed -et -e's/./\n&/g;//D'
Вы можете разбивать кластеры графем вместо символов, если вы хотите печатать текст вертикально. Например,
e
с острым акцентом:С кластерами графем (
e
с его острым акцентом будет один кластер графем):(или
grep -Po '\X'
с GNU grep, созданным с поддержкой PCRE)С символами (здесь с GNU
grep
):fold
предназначен для разбиения на символы, но GNUfold
не поддерживает многобайтовые символы, поэтому вместо этого он разбивает на байты:В StackOver, который состоит только из символов ASCII (то есть один байт на символ, один символ на кластер графем), все три будут давать одинаковый результат.
источник
grep -Po
, не делает то, что можно ожидать (какgrep -P
делает).grep -Po .
находит символы (и комбинированный острый акцент после символа новой строки недопустим) иgrep -Po '\X'
находит кластеры графема для меня. Вам может понадобиться последняя версия grep и / или PCRE, чтобы она работала должным образом (или попробуйтеgrep -Po '(*UTF8)\X'
)Если у вас есть perl6 в вашей коробке:
работать независимо от вашей локали.
источник
Со многими
awk
версиямиисточник
awk -v FS='' -v OFS='\n' '{$1=$1};1'
(интересно , если это более компактен , так как-F ''
может дать в ERE://
)Ниже будет общим:
источник
источник
Поскольку вы специально запросили ответ в bash, вот способ сделать это в чистом bash:
Обратите внимание, что это поймает новую строку в конце « здесь документа ». Если вы хотите избежать этого, но по-прежнему перебираете символы с помощью цикла bash, используйте,
printf
чтобы избежать перехода на новую строку.источник
Также Python 2 можно использовать из командной строки:
или:
или (как прокомментировано 1_CR) с Python 3 :
источник
Вы можете использовать
fold (1)
команду. Это более эффективно, чемgrep
иsed
.Одно существенное различие заключается в том, что в выводе fold будут воспроизводиться пустые строки:
источник
Вы можете обрабатывать многобайтовые символы, такие как:
Что может быть очень удобно, когда вы работаете с живым вводом, потому что там нет буферизации и символ печатается, как только он становится целым .
источник
sed
, для чего нужны сценарии. я вряд ли напишу об этом прямо сейчас - я довольно сонный. это действительно полезно, хотя, при чтении терминала.dd
приведет к разрыву многобайтовых символов, поэтому выходные данные больше не будут текстовыми, поэтому поведение sed будет неопределенным в соответствии с POSIX.Вы можете использовать границы слов также ..
источник
В Баш:
Это работает с любым текстом и только с внутренними компонентами bash (внешняя утилита не вызывается), поэтому должна быть быстрой на очень коротких строках.
Выход:
Если можно изменить IFS и позиционные параметры, вы также можете избежать вызова sub-shell:
источник
обновления здесь - это хакерский | быстрый | pureBashBased способ!
для большей удивительности
источник
fold -b1
?это разделит ваше слово и сохранит его в массиве
var
.источник
источник