2016-04-07 9 views
0

トレースルートを使用するスクリプトを作成しています。私は、トレースルートの各行を繰り返し、次に空白で区切られた各単語を繰り返します。ただし、トレースルートが*文字を返すことがあり、エコー時に問題が発生します(ファイル名が出力される)。文字列の最初の文字が数字かどうかを確認するBash Regex

私は正規表現をいじってきたし、これまでのところ、私はこれを作ってみた:

if [[ $item =~ ^\d ]]; 

項目は、トレースルートの一部です。

トレースルートの各項目について、最初の文字が数字と等しいかどうかを確認してから、それに応じて続行します。

+0

'[$ item =〜^ [0-9]]];'、 '\ d'はサポートされていません。 –

+1

^[[:digit:]] 'も動作します – rock321987

+0

http://stackoverflow.com/questions/35894043/how-do-i-validate-that-a-version-number-is-valid-using-a -regexp-in-bash/35894180#35894180 –

答えて

3

\dは、POSIX Regular Expressions(Bashで使用)ではサポートされていません。あなたはそのような[0-9]とそれを交換する必要があります。

if [[ $item =~ ^[0-9] ]]; 

this StackOverflow answer

も読みやすくするために[:digit:]を使用しませんでしたチェックアウト:

if [[ $item =~ ^[[:digit:]] ]]; 
+0

'^ [[:digit:]]' - '[:digit:]'は、ブラケット式の中に入る必要がある文字クラスです。 –

+0

@TomFenech申し訳ありませんが、私はすぐにタイピングしていました!それを修正しました、ありがとう! – Druzion

1

正規表現を使用する必要がちょうどグロブされます十分:

[[ $item == [0-9]* ]] && echo "it starts with a digit" 

[[ $item == [[:digit:]]* ]] 
+0

ところで、Bash:globsやregexesの方が効率的です。 –

+0

一般的に、正規表現はグロブパターンよりも遅いと考えられますが、私は深刻なベンチマークを行っていません。 – anubhava

関連する問題