文字列を2つの文字列に分割するには?

文字列を2つの文字列に分割するには?

h4 h7 h8 h9 h7空白を区切り文字として使用して配列に入れる方法はすでにわかっていますが、h数字を互いに比較するために数字で区切りたいと思います。

Bashスクリプトでどのように分割できますか?

答え1

#!/bin/bash

arr=( h4 h7 h8 h9 h7 )

for thing in "${arr[@]}"; do
    num=${thing#?}
    printf 'The number in "%s" is %d\n' "$thing" "$num"
done

変数拡張が${variable#pattern}一致を削除する最短のプレフィックス文字列です。このパターンは単一文字と一致します。pattern$variable?

出力は次のとおりです

The number in "h4" is 4
The number in "h7" is 7
The number in "h8" is 8
The number in "h9" is 9
The number in "h7" is 7

または、長さに関係なく、数字以外の接頭辞の削除を無視するにはsed

#!/bin/bash

arr=( hello4 happy7 hobbit8 hulk9 hr-department7 )

for thing in "${arr[@]}"; do
    num=$( printf '%s\n' "$thing" | sed 's/^[^[:digit:]]*//' )
    printf 'The number in "%s" is %d\n' "$thing" "$num"
done

または、末尾の数字の正規表現一致を使用します。

#!/bin/bash

arr=( hello4 happy7 hobbit8 hulk9 hr-department7 )

for thing in "${arr[@]}"; do
    if [[ "$thing" =~ ([[:digit:]]+)$ ]]; then
        printf 'The number in "%s" is %d\n' "$thing" "${BASH_REMATCH[1]}"
    fi
done

関連情報