web-dev-qa-db-ja.com

すべての文字の間にスペースを追加します

UTF-8ドキュメント内のすべての文字または記号の間にスペースを追加するにはどうすればよいですか?例えば。 123hello!1 2 3 h e l l o !になります。

  • BASHOpenOffice.org、およびgeditがありますが、それらのいずれかで実行できます。
  • 場所に余分なスペースが残ることがあるかどうかは気にしません(たとえば、1つの場所に2つまたは3つのスペースが問題ない)。
16
Village

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 中 の 画 像 回 転 情 報 対 応 に よ り 、 一 部 画 像 ( 特 に 『 
$ 
17
sarnold

最短の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 !
22
SiegeX

あなたはbashを持っているので、私はあなたがsedにアクセスできると仮定します。次のコマンドラインはあなたが望むことをします。

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

sedは大丈夫ですが、これは純粋なbashです

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

これはあなたのために働くかもしれません:

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

文字間のスペースをスペースに置き換えます。

3
potong

私はこれらのソリューションが好きです。なぜなら、ここにある他のソリューションのような末尾のスペースがないからです。

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}'
2
user4427511