2017-05-11 3 views
0

これは私の現在のシェルスクリプトにあります。私は正規表現でかなり悪いです。ダッシュ付きの文字と数字に正規表現を使用する方法

echo $1 | grep -E '^[A-Z]${3}|^[0-9]${4}|^[ABCD]$' 

私はこのように私の入力が必要になります。

./dlchek.sh ACV-1319-A 

これは一般的な形式です:XYXは、任意の文字を表します1111は任意の番号にすることができ、そしてAはありXYX-1111から (A、B、C、D)のいずれかになります。私は途中でUNIXを使用しています。私は、フォーマットが正しいかどうかをチェックし、正しい場合はコード0で、正しくない場合は1で終了する必要があります。

これは予想される出力です.3行目のみがフォーマットに従ったために動作しました。

[[email protected] final]$ ./dlcheck.sh ACV-13-A 
[[email protected] final]$ echo $? 
1 
[[email protected] final]$ ./dlcheck.sh ACV-13119-A 
[[email protected] final]$ echo $? 
1 
[[email protected] final]$ ./dlcheck.sh ACV-1319-A 
[[email protected] final]$ echo $? 
0 
[[email protected] final]$ ./dlcheck.sh ACV-1319-Y 
[[email protected] final]$ echo $? 
1 

答えて

0
^[A-Z]{3}-[0-9]{4}-[ABCD]$ 

$$そこにそれらを何をしているのか?あまりにも多くのエンディング。そしてそれらのパイプ?私のようにしてください、https://regex101.com/を使用して、毎回何かを学ぶでしょう..

+0

すばらしい応答ありがとう。私はregex101で試してみましたが、動作しましたが、私の.shで動作しました。これは私が今持っているものです:grep -E '^ [A-Z] {3} - [0-9] {4} - [ABCD] $' –

+0

はパターンですか? –

+0

はい、これまで確認したのはこれだけです。私は出口コードとループを追加して、これを把握します。私は実際にそれを変数に設定しました。これは基本的に次のようになります:x = 'echo $ 1 | grep -E '^ [AZ] {3} - [0-9] {4} - [ABCD] $' 'エコー$ xが一致するかどうかを調べる –

関連する問題