Como posso dividir as letras de uma palavra, com cada letra em uma linha separada?
Por exemplo, dado que "StackOver"
eu gostaria de ver
S
t
a
c
k
O
v
e
r
Eu sou novo no bash, então não tenho idéia por onde começar.
command-line
split
words
Sijaan Hallak
fonte
fonte
Here string
, grosso modo equivalente aecho foo | ...
apenas menos digitação. Veja tldp.org/LDP/abs/html/x17837.html.
para\B
(não corresponde ao limite da palavra).sed
como:sed -et -e's/./\n&/g;//D'
Convém quebrar os clusters de grafema em vez de caracteres, se a intenção for imprimir texto verticalmente. Por exemplo, com um
e
sotaque agudo:Com clusters de grafema (
e
com seu sotaque agudo seria um cluster de grafema):(ou
grep -Po '\X'
com o GNU grep criado com suporte para PCRE)Com caracteres (aqui com GNU
grep
):fold
destina-se a quebrar caracteres, mas o GNUfold
não suporta caracteres de bytes múltiplos; portanto, quebra em bytes:No StackOver, que consiste apenas em caracteres ASCII (portanto, um byte por caractere, um caractere por cluster de grafema), os três forneceriam o mesmo resultado.
fonte
grep -Po
que não faça o que se esperaria (comogrep -P
faz).grep -Po .
encontra caracteres (e um sotaque agudo combinado após um caractere de nova linha é inválido) egrep -Po '\X'
encontra grupos de graphem para mim. Você pode precisar de uma versão recente do grep e / ou PCRE para que ele funcione corretamente (ou tentargrep -Po '(*UTF8)\X'
)Se você tiver perl6 em sua caixa:
trabalhar independentemente do seu local.
fonte
Com muitas
awk
versõesfonte
awk -v FS='' -v OFS='\n' '{$1=$1};1'
(perguntando se isso é mais portátil já que-F ''
pode produzir o ERE://
)O abaixo será genérico:
fonte
fonte
Como você pediu especificamente uma resposta no bash, eis uma maneira de fazê-lo no bash puro:
Observe que isso capturará a nova linha no final do " documento aqui ". Se você quiser evitar isso, mas ainda repetir os caracteres com um loop bash, use
printf
para evitar a nova linha.fonte
Também Python 2 pode ser usado na linha de comando:
ou:
ou (como comentado por 1_CR) com Python 3 :
fonte
Você pode usar o
fold (1)
comando É mais eficiente quegrep
esed
.Uma diferença significativa é que a dobra reproduzirá linhas vazias na saída:
fonte
Você pode manipular caracteres multibyte como:
O que pode ser bastante útil quando você estiver trabalhando com entrada ao vivo, porque não há buffer e um caractere é impresso assim que ele é inteiro .
fonte
sed
servem os scripts. Não é provável que eu escreva uma sobre isso agora - estou com muito sono. é realmente útil, porém, ao ler um terminal.dd
isso quebrará caracteres multibyte, portanto a saída não será mais texto, portanto o comportamento do sed não será especificado conforme POSIX.Você também pode usar limites de palavras.
fonte
Na festança:
Isso funciona com qualquer texto e apenas com internos do bash (nenhum utilitário externo chamado), portanto, deve ser rápido em seqüências muito curtas.
Resultado:
Se estiver correto alterar o IFS e alterar os parâmetros posicionais, você também pode evitar a chamada sub shell:
fonte
atualizações aqui é a maneira hacky | mais rápida | pureBashBased!
para mais grandiosidade
fonte
fold -b1
?isso dividirá sua palavra e a armazenará em matriz
var
.fonte
fonte