Shell擴充套件正規表示式練習1 電話號碼過濾

2021-10-11 20:36:29 字數 1389 閱讀 1881

國內**號碼目前一般採用區號+7位或8位阿拉伯數字組成,為了盡可能達到練習的目的,自己新增一些規則:

①3位區號:如北京010,上海021,西安029,這裡有個例外就是026並未分配,需要做排除處理。②4位區號必須以0開頭。③7位或8位**號碼首位必不能為0,。

**號碼常見書寫格式自行定義如下幾類,如:

0934—12345678

093412345678

(0934)空格12345678

(0934)—12345678

1. 先對最左邊括號做模式匹配,區號有帶「()」也有不帶「()」的情況,可用「^\(?」,因為「(」為特殊字元,所以需要用「\」進行轉義。

2. 匹配區號

[0]([1][0]|[2]([^6])|[1-9])\)?

其間使用或表達和表示式分組以及區間和排除性字元「^6」(排除026)等。最後同樣需要「\」對「)」進行轉義。「[1][0]|[2]([^6])|[1-9]」匹配北京010和02x以及0***(4位區號)的情況。

3. 匹配「——」或空格或無符號使用管道 (—|空格|)

4. 匹配7或8位**號碼,使用間隔。

[1-9][[:digit:]]

[1-9]過濾掉首位為0的情況。為啥這裡不能用[^0]呢?有沒有認真想一想?因為單純只排除0外,還有很多其他字元,可不能保證一定就是數字了。

加入錨字元,完整模式如下:

『/^(?0)?(-| |)[1-9][[:digit:]]$/』

#/bin/bash

#program:

# script to filter bad phone numbers

gawk --re-interval '/^\(?[0]([1][0]|[2]([^6])|[1-9])\)?(-| |)[1-9][[:digit:]]$/'

```測試結果如下:```

bash```

bash

[root@test script]# cat iphonelist

093487654321

09347654321

0934654321

022-87654321

(012)87654321

(026)87654321

(022)-7654321

(5305)76543210

(0755) 76543210

[root@test script]# cat iphonelist | ./isphone.sh

093487654321

09347654321

022-87654321

(022)-7654321

(0755) 76543210

`

shell擴充套件正規表示式

匹配前面子表示式1次以上 例如 go d,將匹配至少乙個o 如god,good,goood 匹配前面子表示式0次或者1次 例如 go?d,將匹配gd或god 括號中的字串作為乙個整體 例如 xyz 將匹配xyz整體1次以上,如xyzxyz 以或的方式匹配字條串 例如1 good food,將匹配go...

擴充套件正規表示式

事實上,一般實驗者只需要熟悉基礎的正規表示式就足夠了。不過有時候為了簡化命令操作,了解一些使用範圍更廣的擴充套件表示式,會更加方便。正規表示法 grep v regular express.txt grep v 需要使用到管線命令來搜尋兩次!那麼如果使用延伸型的正規表示法,我們可以簡化為 egrep...

擴充套件正規表示式

使用egrep或者grep e 一般都是使用egrp 語法 擴充套件正規表示式 re字元 意義與範例 重複乙個或者乙個以上的前乙個字元 egrep n go d regular express.txt 零個或者乙個前乙個字元 egrep n go?d regular express.txt or的意...