最初の数字を探して残りの文字列を返します。

最初の数字を探して残りの文字列を返します。

Bashを使用して文字列の最初の数字を見つけて、文字列の残りの部分を削除するにはどうすればよいですか?

たとえば、次の文字列があります。

SomeText.MoreText.Whatever.1.2.3.4-branch.ext

これで終わりたいと思います-

1.2.3.4-branch.ext

数字を見つける方法を提案するいくつかの答えが見つかりました(例:この問題)、しかし、文字列の一部が見つかり返されません。

答え1

grep一致する部分(-o)のみを抽出するには、を使用します。

grep -o '[0-9].*'
  • [0-9]最初の数字と一致し、.*残りの数字と一致します。

例:

$ grep -o '[0-9].*' <<<'SomeText.MoreText.Whatever.1.2.3.4-branch.ext'
1.2.3.4-branch.ext

答え2

ほとんどのPOSIXシェルで最も簡単で利用可能な方法は次のとおりです。

$ var='SomeText.MoreText.Whatever.1.2.3.4-branch.ext'

$ echo "${var#"${var%%[0-9]*}"}"
1.2.3.4-branch.ext

このように外部ユーティリティ(expr、sed、awkなど)を呼び出す必要はなく、これらのユーティリティを呼び出すのにかかる時間も回避されます(この例の長い文字列のような短い文字列の場合(k's)10)遅いです。

関連情報