2017-05-11 55 views
0

所以這就是我目前在我的shell腳本中。我在正則表達式上很糟糕。如何對破折號的字母和數字使用正則表達式

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

我需要這樣我輸入:

./dlchek.sh ACV-1319-A 

這是一般格式爲:XYX-1111-A,其中XY-X可以是任何字母,1111可以是任意數,A具有(A,B,C,D)。順便說一句,我正在使用unix。我只需要檢查格式是否正確,並在代碼0正確時退出,如果不正確則退出1。

這是預期的輸出:其中第3行是唯一符合格式的工作。

[[email protected]lue 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] $''echo $ x查看它是否匹配 –

相關問題