定義乙個file.txt檔案,包含內容如下
$ catfile
.txt
987-123-4567
123456
7890
(123) 456-7890
222122-213-321
21231-456
7894
321984-4984
(218)-393-3399
(001) 345-0000
要求列印出格式如 (***) ***-***x or ***-***-***x. (x means a digit)的行
grep -e "[[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]][[:digit:]]|([[:digit:]][[:digit:]][[:digit:]]) [[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]][[:digit:]]" file.txt
得到:987-123-4567
321 984-4984
這樣搜不到
(001) 345-0000
grep -e "\([[:digit:]][[:digit:]][[:digit:]]\) [[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]][[:digit:]]|[[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]][[:digit:]]" file.txt
得到987-123-4567
(123) 456-7890
(001) 345-0000
把括號轉義一下,括號兩邊都需要轉義;可以滿足條件
這種做法看起來太笨了,有多少個數字就得重複多少次[[:digit:]]
這是區域性條件符合就會匹配,比如111(001) 345-0000也能匹配進來;並不是完全匹配的
換一種做法,用正則來匹配數字
cat file.txt | grep -eo '^(\([0-9]\) )[0-9]-[0-9]$|^([0-9]-)[0-9]$'
這裡有兩個匹配條件
^(\([0-9]\) )[0-9]-[0-9]$ 匹配形如(123) 456-7890的**號碼
^([0-9]-)[0-9]$ 匹配形如987-123-4567的**號碼
用sed來找
#using sedsed -n -e '/^([0-9]-|\([0-9]\) )[0-9]-[0-9]$/p' file.txt
#using grep in perl mode
grep -p '^(\d-|\(\d\) )\d-\d$' file.txt
整數字串轉化
1.用程式設計的方法將整數轉化成字串 整數轉化成字串,可以採用加 0 再逆序的辦法,整數加 0 就會隱性轉換成char型別的數。include include using namespace std int main void temp i 0 i i 1 while i 0 str j 0 cou...
貪心 數字串
描述 description 給你乙個長度為n的數字串,數字串裡會包含1 m這些數字。如果連續的一段數字子串包含了1 m這些數字,則稱這個數字字串為num串。你的任務是求出長度最短的num串是什麼,只需要輸出這個長度即可。1 n,m 200000 輸入格式 input format 第一行給定n和m...
數字串 (樹狀陣列)
原題 wannafly挑戰賽15 d 題意 給乙個數字串,每次操作改變乙個位置的數字,求每次操作後,有多少個子串滿足以下要求 長度在區間 l,r 內 首數字 尾數字 解析 對於乙個位置p,求的是乙個sum p r 1到p l 1範圍內數字大於p位置的個數和p l 1到p r 1範圍內數字小於p位置的...