入力文字列を拡張するためのシェルスクリプト

入力文字列を拡張するためのシェルスクリプト

入力文字列を受け入れ、次のように拡張するシェルスクリプトを作成するのに役立ちます。

入力する => 出力

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

おすすめ記事