在每个字母之间添加空格

时间:2012-01-02 01:26:22

标签: bash openoffice.org

如何在UTF-8文档中的每个字符或符号之间添加空格?例如。 123hello!变为1 2 3 h e l l o !

  • 我有BASHOpenOffice.orggedit,如果其中任何一个可以做到这一点。
  • 我不在乎是否有时会在某些地方留下额外的空间(例如,在一个地方有2或3个空格没问题)。

6 个答案:

答案 0 :(得分:20)

最短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 !

答案 1 :(得分:16)

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 :(得分:7)

既然你有bash,我会假设你有权访问sed。以下命令行将按您的意愿执行。

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

答案 3 :(得分:4)

sed没关系,但这是纯粹的bash

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

答案 4 :(得分:3)

这可能对您有用:

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

用空格替换字母之间的空格。

答案 5 :(得分:2)

我喜欢这些解决方案,因为它们没有像其他人一样的尾随空间 这里。

GNU awk:

Laravel 5.1

GNU awk:

echo 123hello! | awk NF=NF FS=

POSIX awk:

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