Подтвердить что ты не робот

Добавить пробел между каждой буквой

Как я могу добавить пробелы между каждым символом или символом в документе UTF-8? Например. 123hello! становится 1 2 3 h e l l o !.

  • У меня есть BASH, OpenOffice.org и gedit, если любой из них может это сделать.
  • Мне все равно, если он иногда оставляет лишние места в местах (например, 2 или 3 пробела в одном месте не проблема).
4b9b3361

Ответ 1

sed(1) может сделать это:

$ sed -e 's/\(.\)/\1 /g' < /etc/passwd
r o o t : x : 0 : 0 : r o o t : / r o o t : / b i n / b a s h 
d a e m o n : x : 1 : 1 : d a e m o n : / u s r / s b i n : / b i n / s h 

Хорошо работает напр. UTF-8 кодировал японский контент:

$ file japanese 
japanese: UTF-8 Unicode text
$ sed -e 's/\(.\)/\1 /g' < japanese 
E X I F 中 の 画 像 回 転 情 報 対 応 に よ り 、 一 部 画 像 ( 特 に 『 
$ 

Ответ 2

Самая короткая sed версия

sed 's/./& /g'

Выход

$ echo '123hello!' |  sed 's/./& /g'
1 2 3 h e l l o !

Обязательная версия awk

awk '$1=$1' FS= OFS=" "

Выход

$ echo '123hello!' |  awk '$1=$1' FS= OFS=" "
1 2 3 h e l l o !

Ответ 3

Поскольку у вас есть bash, я предполагаю, что у вас есть доступ к sed. Следующая команда будет делать то, что вы пожелаете.

$ sed -e 's:\(.\):\1 :g' < input.txt > output.txt

Ответ 4

sed в порядке, но это чистый bash

string=hello
for ((i=0; i<${#string}; i++)); do
    string_new+="${string:$i:1} "
done

Ответ 5

Это может сработать для вас:

echo '1 23h ello  !   ' |  sed 's/\s*/ /g;s/^\s*\(.*\S\)\s*$/\1/;l'
1 2 3 h e l l o !$
1 2 3 h e l l o !

В ретроспективе гораздо лучшее решение:

sed 's/\B/ /g' file

Заменяет пробел между буквами пробелом.

Ответ 6

Мне нравятся эти решения, потому что они не имеют заднего пространства, как остальные здесь.

GNU awk:

echo 123hello! | awk NF=NF FS=

GNU awk:

echo 123hello! | awk NF=NF FPAT=.

POSIX awk:

echo 123hello! | awk '{while(a=substr($0,++b,1))printf b-1?FS a:a}'