shell的gawk扩展正则表达式匹配电话号码

有网友碰到过这样的问题:shell的gawk扩展正则表达式匹配电话号码,问题详细内容为:

gawk -n '/^(?[0-9]{3})?[, ,.,-]/' phon

(234) 345-789

234-345-789

234-345.789

234 345.789

000-000-0000

123-456-7890

212-555-1234

(202) 555-9876

234.123.4567

gawk -n '/^(?[0-9]{3})?[), ,.,-]/' phon

(234) 345-789

(234)345-789

234-345-789

234-345.789

234 345.789

000-000-0000

123-456-7890

212-555-1234

(317)555-1234

(202) 555-9876

234.123.4567

以上两种写法匹配出的结果无法理解就是中括号中 一个能匹配到(317)555-1234一个没法匹配到

,我搜你通过互联网收集了相关的一些解决方案,希望对有过相同或者相似问题的网友提供帮助,具体如下:

网友提供的解决方案1:

你的匹配不够完整,我把所有情况穷举出来了,你所疑惑的就在第二个正则,第五种情况第一个正则:awk -n '/^(?[0-9]{3})?[, ,.,-]/' phon第1种:(000) 000

第2种:(000).000

第3种:(000)-000第4种:(000 000

第5种:(000.000

第6种:(000-000第7种:000) 000

第8种:000).000

第9种:000)-000第10种:000 000

第11种:000.000

第12种:000-000第二个正则:awk -n '/^(?[0-9]{3})?[), ,.,-]/' phon第1种:(000))000

第2种:(000) 000

第3种:(000).000

第4种:(000)-000第5种:(000)000 这里可以匹配 (317)555-1234 (234)345-789

第6种:(000 000

第7种:(000.000

第8种:(000-000第9种: 000))000

第10种:000) 000

第11种:000).000

第12种:000)-000第13种:000)000

第14种:000 000

第15种:000.000

第16种:000-000收获园豆:20

============================================

我的主要疑惑点是在第二个式子的)?[), ,.,-] 这个位置是如何匹配到(000)000 按理说我匹配到)后后面是是应该是或逻辑去匹配)空格 点号 -等四个符号 那他是如何匹配到数字的即(234)345-789这种

awk -n '/^(?[0-9]{3})?[), ,.,-]/p' phon(234) 345-789

(234)345-789

234-345-789

234-345.789

234 345.789

000-000-0000

123-456-7890

212-555-1234

(317)555-1234(202) 555-9876

============================================

@TNL: (?[0-9]{3})? 你不要把前面的小括号看成一个整体,分开来看就好理解了!

?的意思是,前面的字符可有可无,那么第一个小括号就是存在两种情况,有或者没有,第二个小括号一样的意思

awk正则表达式只匹配小写单词怎么写?

答:如果是gawk,有一个内置变量IGNORECASE ,如果这个值非0,则忽略大小写 你把它设置为0试试

正则表达式间隔是什么

答:正则中 {n,m}可以指定模式的个数据,awk中默认状态下不支持。需要用到{n,m}的就是正则表达式间隔。 解释: However, because old programs may use `{' and `}' in regexp constants, by default gawk does not match interval expressions in r...

shell编程怎么抽取匹配正则表达式的字符串?

a=$( expr 'helloworld20140501.txt' : '.*\([0-9]\{8\}\).*' ) echo $a linux shell 中可以将命令的结果赋值给变量,$(命令)这种格式将返回命令...

Linux Shell正则表达式如何匹配1~3位数字

3\}$' test.txt | grep '^[1-9]' 如果是变量 echo $var | grep '^[0-9]\{1,3\}$' | grep '^[1-9]' $表示行尾 这个正则不匹配 1...

Linux shell正则表达式如何匹配引号内的字符串

你贴出来这个"pipe dquote>"也属于“引号内的字符串”,哪里有问题?或者你把所有输入文本、预期结果都贴一下

Shell if 条件中 加正则表达式 匹配屏幕输出结果这些字母(m,M,...

没问题, 能帮忙编写一个shell程序来搞定哦 能否看看wo 的网名呢》帮忙搞定啊

Linux Shell正则表达式如何匹配1~3位数字

39; test.txt | grep '^[1-9]' 如果是变量 echo $var | grep '^[0-9]\{1,3\}$' | grep '^[1-9]' $表示行尾 这个正则不匹配 12a 这样的字符串 ...

Linux Shell正则表达式如何匹配1~3位数字

grep '^[0-9]\{1,3\}$' test.txt | grep '^[1-9]' 如果是变量 echo $var | grep '^[0-9]\{1,3\}$' | grep '^[1-9]' $表示行尾 这个正则不匹配 12a 这样的字符串 你的变量内容是什么样...

Linux Shell正则表达式如何匹配1~3位数字

grep '^[0-9]\{1,3\}$' test.txt | grep '^[1-9]' 如果是变量 echo $var | grep '^[0-9]\{1,3\}$' | grep '^[1-9]' $表示行尾 这个正则不匹配 12a 这样的字符串 你的变量内容是什么样的? 我用来...

怎么样在shell中表达不匹配右边的正则表达式

这样可以吗? sed 's/test./& pass/' 1.txt 要是按照我的意思 sed 's/$/ pass/' 1.txt 就行了 完全按照你那个命令走的话是 sed 's/[[:alpha:]]\{4\}[...

shell脚本编程中expr模式匹配问题,正则表达式中的?

正则表达式了解一下就知道了,这个是匹配正、负整数的一个表达式,并且允许 0 出现在前面的数字。可以用下面的语句做测试: [seesea@UC ~]$ if expr "-3" : '...

MySQL 字符串模式匹配 扩展正则表达式模式匹配

grep和sed的扩展正则表达式模式匹配的格式。 扩展正则表达式模式匹配 由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用R...

请注意,本站信息均收集自互联网,相关信息仅供参考,医疗等重要信息请以正规途径为最终意见,本站不承担任何责任!