¿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 string
grosso 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).sed
como: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
e
acento agudo:Con los grupos de grafemas (
e
con 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
):fold
está destinado a dividir caracteres, pero GNUfold
no 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 -Po
que no haga lo que uno esperaría (comogrep -P
hace).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
awk
versionesfuente
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
printf
para 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 quegrep
ysed
.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
sed
está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.dd
romperá 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