入力文字列を受け入れ、次のように拡張するシェルスクリプトを作成するのに役立ちます。
入力する => 出力
A2B3C4 => AABBBCCCC
ベストアンサー1
$ perl -e 'my @F=split //, shift;
for my $i (0..@F) { print $F[$i] x $F[++$i]};
print "\n"' A2B3C4
AABBBCCCC
@F
これにより、各単一文字が配列()の要素になるように入力が分割されます。次に、Perlの文字列乗算演算子(x
)を使用して、各偶数要素(0から始まる)を次の奇数要素と同じ回数だけ印刷します。
または、コマンドラインではなく標準入力から入力を受け取るには、次のようにします。
$ echo $'A2B3C4\nE5F2G7' | perl -ne 'my @F=split //;
for my $i (0..@F) { print $F[$i] x $F[++$i]};
print "\n"'
AABBBCCCC
EEEEEFFGGGGGGG
どちらの実装も、1桁の文字列と1桁の数だけを許可するという点で欠陥があります。
以下は、その制限を削除します。
$ echo A12B3CZ4 | perl -ne '
# insert a space between numbers and alphabetic characters.
s/([[:alpha:]])(\d)/$1 $2/g;
s/(\d)([[:alpha:]])/$1 $2/g;
# split on spaces
@F = split / /;
for my $i (0..@F) { print $F[$i] x $F[++$i]};
print "\n"'
AAAAAAAAAAAABBBCZCZCZCZ