web-dev-qa-db-ja.com

`sed`で文字列の文字の間に「&」を1つ挿入するにはどうすればよいですか?

sedは次のようにすることができます:

12345

になる:

1&2&3&4&5

11
user243633

Unixユーティリティ:

fold -w1|paste -sd\& -

説明:

"fold -w1"-各入力文字を独自の行にラップします

fold-指定された幅に収まるように各入力行を折り返します

-w、-width = WIDTHは、80ではなくWIDTH列を使用します

%echo 12345|fold -w1
1
2
3
4
5

"paste -sd\& -"-&をセパレータとして使用して、入力行をマージします

貼り付け-ファイルの行をマージ

-s、--serial並列ではなく一度に1つのファイルを貼り付け

-d、--delimiters = LIST TABの代わりにLISTの文字を再利用します

%fold -w1|paste -sd\& -
1&2&3&4&5

(入力に複数の行が含まれている場合、それらは&で結合されます)

15
zeppelin

sedを使用

sed 's/./&\&/g;s/.$//'
11
αғsнιη
sed 's/\B/\&/g'

\ B-Word境界以外のすべての場所に一致します。つまり、左側の文字と右側の文字が両方とも「Word」文字または両方とも「非Word」文字である場合に一致します。

情報:GNU sedマニュアル、正規表現拡張機能

テスト:

sed 's/\B/\&/g' <<< '12345'
1&2&3&4&5
9
MiniMax

これは他のいくつかの回答よりも少し遅くなりますが、かなり明確です:

echo 12345 | Perl -lnE 'say join "&", split //'
4
glenn jackman