¿Cómo puedo dividir las letras de una palabra, con cada letra en una línea separada?
Por ejemplo, dado que "StackOver"
me gustaría ver
S
t
a
c
k
O
v
e
r
Soy nuevo en bash, así que no tengo idea de por dónde empezar.
command-line
split
words
Sijaan Hallak
fuente
fuente

Here stringgrosso modo equivalente deecho foo | ...escribir menos. Ver tldp.org/LDP/abs/html/x17837.html.a\B(no coincide con el límite de la palabra).sedcomo:sed -et -e's/./\n&/g;//D'Es posible que desee romper en grupos de grafemas en lugar de caracteres si la intención es imprimir texto verticalmente. Por ejemplo, con un
eacento agudo:Con los grupos de grafemas (
econ su acento agudo sería un grupo de grafemas):(o
grep -Po '\X'con GNU grep construido con soporte PCRE)Con caracteres (aquí con GNU
grep):foldestá destinado a dividir caracteres, pero GNUfoldno admite caracteres de varios bytes, por lo que se divide en bytes:En StackOver, que solo consta de caracteres ASCII (un byte por carácter, un carácter por grupo de grafemas), los tres darían el mismo resultado.
fuente
grep -Poque no haga lo que uno esperaría (comogrep -Phace).grep -Po .encuentra caracteres (y un acento agudo combinado después de un carácter de nueva línea no es válido), ygrep -Po '\X'encuentra grupos de gráficos para mí. Es posible que necesite una versión reciente de grep y / o PCRE para que funcione correctamente (o intentegrep -Po '(*UTF8)\X')Si tienes perl6 en tu caja:
trabajar independientemente de su localidad.
fuente
Con muchas
awkversionesfuente
awk -v FS='' -v OFS='\n' '{$1=$1};1'(preguntando si eso es más portátil, ya-F ''que podría dar lugar al ERE://)Lo siguiente será genérico:
fuente
fuente
Como solicitó específicamente una respuesta en bash, aquí hay una manera de hacerlo en bash puro:
Tenga en cuenta que esto capturará la nueva línea al final del " documento aquí ". Si desea evitar eso, pero aún itera sobre los caracteres con un bucle bash, use
printfpara evitar la nueva línea.fuente
También se puede usar Python 2 desde la línea de comandos:
o:
o (como lo comentó 1_CR) con Python 3 :
fuente
Puedes usar el
fold (1)comando. Es más eficiente quegrepysed.Una diferencia significativa es que el pliegue reproducirá líneas vacías en la salida:
fuente
Puede manejar caracteres multibyte como:
Lo que puede ser bastante útil cuando trabajas con entrada en vivo porque no hay almacenamiento en búfer allí y se imprime un personaje tan pronto como está completo .
fuente
sedestán los scripts. No es probable que escriba uno ahora mismo, tengo mucho sueño. Sin embargo, es realmente útil cuando se lee un terminal.ddromperá los caracteres multibyte, por lo que la salida ya no será texto, por lo que el comportamiento de sed no se especificará según POSIX.También puede usar límites de palabras.
fuente
En bash:
Esto funciona con cualquier texto y solo con elementos internos de bash (no se llama una utilidad externa), por lo tanto, debe ser rápido en cadenas muy cortas.
Salida:
Si está bien cambiar IFS y cambiar los parámetros posicionales, también puede evitar la llamada de sub-shell:
fuente
actualizaciones aquí es la manera hacky | rápido | pureBashBased!
para más genialidad
fuente
fold -b1?esto dividirá su palabra y la almacenará en una matriz
var.fuente
fuente