sed:文字間にのみスペースを追加してください

sed:文字間にのみスペースを追加してください

数字または他の文字の間ではなく、文字間にのみスペースを挿入しようとしています。

hello woRLd 12ab34しなければならないh e l l o w o R L d 12a b34

sed 's/\([a-zA-Z]\)\([a-zA-Z]\)/\1 \2/g' file.txt

明らかにするh el lo w or LD 12a b34

次の文字も文字であることを確認しないため、各文字の後にスペースを挿入することはできません。

コマンドを2回実行するとsed問題は解決しますが、エレガントではありません。可能であれば、この問題を解決するために使用する必要がありますsed

答え1

ループ+条件付き分岐を使用して実行できます。

$ echo "hello woRLd 12ab34" | sed '
:a
s/\([a-zA-Z]\)\([a-zA-Z]\)/\1 \2/
ta
'
h e l l o w o R L d 12a b34

またはよりコンパクト

$ echo "hello woRLd 12ab34" | sed -e :a -e 's/\([a-zA-Z]\)\([a-zA-Z]\)/\1 \2/' -e ta
h e l l o w o R L d 12a b34

答え2

コマンドを2回実行する必要はなく、スクリプトで代替コマンドを2回実行するだけですsed。これを行う優雅な方法があります。空のパターンは前のパターンを繰り返します。ssedsed//

sed 's/\([a-zA-Z]\)\([a-zA-Z]\)/\1 \2/g;s//\1 \2/g' file.txt

読みやすくするために拡張正規表現を使用することをお勧めします。

sed -E 's/([a-zA-Z])([a-zA-Z])/\1 \2/g;s//\1 \2/g' file.txt

答え3

次のように正規表現が必要です。視野。残念ながらsedツアーをサポートしていません。だからあなたは使用する必要があります真珠

$ echo "hello woRLd 12ab34" | perl -pe 's/([a-zA-Z])(?=[a-zA-Z])/\1 /g'
h e l l o w o R L d 12a b34

$ perl -pe 's/([a-zA-Z])(?=[a-zA-Z])/\1 /g' file.txt
h e l l o w o R L d 12a b34

perl -pne処理する必要がある複数の入力行があり、perl -i -peファイルが適切に編集されている場合は、次のようにします。

関連情報