4

シェル スクリプトを作成しようとしていますが、その中で文字列内の-32の存在を探す必要があります。残念ながら、ダッシュを実行しているコンピューターで実行する必要があるため、バシズムを使用せずに実行する必要があります。

私は試しましたが、それは-321case ${1+"$@"} in *-32*);;のようなものを拾います。そのフラグだけを探すために正規表現などを使用する方法はありますか? 文字列内のスペースで区切られた他のフラグを持つことができます。

私が必要とする正規表現は、スペースまたは行末の後に -32 を探すと思います。-32(\s|$)

私は正規表現にかなり慣れていないので、それが最善の方法であるかどうかはわかりません。どんな助けでも大歓迎です!

ありがとう!

4

2 に答える 2

3

grep単語境界で使用できます:

grep -E '-32\b' FILE

\b「単語境界」で一致 = 英数字と英数字以外の文字の間の位置。

デフォルトのロケールでは、「英数字」(上記で使用されている用語) は、文字クラス[a-zA-Z0-9_](つまり、任意の数字、A ~ Z の任意の文字、およびアンダースコア) に一致する任意の文字を意味します。

同様に、単語の境界がない場所 (つまり、両側の文字が同じタイプ、両方が英数字、または両方が非英数字である\B場所) に一致します。

したがって、マイナス記号のに英数字以外の文字 (スペースなど) が必要であることを確認したい場合は、次のように記述します。

grep -E '\B-32\b' FILE

これは一致xx -32 xxしますが (マイナスの前にスペースがある場合)、一致しません xx-32 xx(スペースなし)。スペースとマイナスは両方とも非英数字\Bであるため、それらの間で一致しますが、一致し\bません。

マイナス記号の前に必ず英数字を付けたい場合は、次のように記述します。

grep -E '\b-32\b' FILE

これは、たとえばx-32 x(スペースなしで) 一致しますが、x -32 x(マイナスの前にスペースがあると) 一致しません。

于 2014-07-07T16:59:34.837 に答える