TEXT='Random text 1 and some more random'
TEXT1='Random 19 and more'
TEXT='Anything 7 text text text'
数字とその数字の前にあるすべてを手に入れたいです。
これで、数字なしでテキストを取得できます。
echo "${TEXT// [0-9]*/}"
私の質問は:私が使用しているように、組み込みの純粋なBashを介して私が望むものを得る方法はありますか?
答え1
この試み:
echo "'${TEXT// [^0-9]*/}'" "'${TEXT1// [^0-9]*/}'"
出力:
'Anything 7' 'Random 19'
文字列にいいえ数字、このコードは最初のスペースの後のすべての内容を削除します。
答え2
数値セットが1つしかない場合は、2つのステップ(1つの拡張)で実行できます。
数字で終わる最長の前のテキストを削除します。
$ text='Random 923 and more' $ echo "'${text##*[0-9]}'" ' and more'
次に、元の文字列から選択した末尾のテキストを削除します。
$ echo "'${text%"${text##*[0-9]}"}'" 'Random 9'
この方法は、末尾のテキストに数字が追加されていない場合に機能します。
複数の数値クラスターがあり、最初の数字のみが必要な場合は、数字が長くなり、2つの追加変数が必要です。
$ text='Random 945 and more 752 numbers'
$ lead=${text%%[0-9]*}
$ trail=${text#"$lead"}
$ echo "'$lead${trail%%[!0-9]*}'"
'Random 945'
答え3
Bash シェルの正規表現一致機能を使用できます。
$ TEXT='Random text 1 and some more random'
$ [[ $TEXT =~ ^[^0-9]*[0-9] ]] && printf '%s\n' "$BASH_REMATCH"
Random text 1
^[^0-9]*[0-9]
ゼロ以上の数字ではなく、数字と文字列の先頭に固定された数字と一致します。