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)遅いです。