在Linux终端中使用带有egrep的正则表达式查找数字

时间:2015-11-19 11:17:28

标签: regex linux terminal

我想查找所有分隔的单词(表示两个空格之间的字符),即使用egrep的Linux终端中的十进制数字,包括加号和减号。

我的解决方案:

(?<= |\n|\t)[\+\-]?[0-9]+(?= |\n|\t)

说明:

  • (?<= |\n|\t)检查十进制数字
  • 之前是否有空格或换行符或制表符
  • (?= |\n|\t)检查十进制数后是否有空格或换行符或制表符。

这个代码在我测试实现的程序Kiki 0.5.6中运行良好,但是如果我将它复制到终端,则它不起作用。我认为终端无法识别特殊的括号结构(?=?<=)。我对吗?我该如何申请终端?

例如:我的文字:

1.fasfa
123asfavdsvdas156
1safsavdsvsd1sdva5s31as35d1va
595s6dva2sdvas9
asd9as5dv92s
sd559vs fs5s94 4dfs dfa4s44 459    9dasf 8sdfa 5sfa
napr. uNIveRziTA
sfaf 2262 2226 56565 adss
uNiVerZita
uNIVERZITa
123
123 sadasf 123456 sfafs 134
-1234- -25- -5- 5- --55
-
-55
123 100 999 124 6262 62 6 2 62 62 65 26565 22 62 62652 +665 +0649  ---662 265 959 595 099 199 -059 -0245 -444
--1245 -555-5-55 --555- 555-
+25
 -55 
+++55 +5 ++5 ++55+665+
samo samo  samo   samo otec otec skola skola     samo lamo samo lamo
re20. (?<=(\t|\n| ))([+-])?[1-9][0-9]*(?= |$|\n)
--- ---
doma doma doma doma doma doma doma doma doma
meno.priezvisko@tuke.sk meno.priezvisko.1@tuke.sk meno.priezvisko@student.tuke.sk meno.priezvisko.2@student.tuke.sk

23:56:59.555
00:00:00.000
23:59:59.999

31/12/2099
00/12/2054
01/01/2000

匹配:

459
2262
2226
56565
123
123
123456
134
-55
123
100
999
124
6262
62
6
2
62
65
26565
22
62
62652
+655
+0649

1 个答案:

答案 0 :(得分:1)

egrep不支持环绕声断言。但是,GNU grep带有使用-P开关的perl兼容正则表达式:

grep -oP '(?<=\s|^)[+-]?[0-9]+(?=\s|$)' input

请注意,您可以将|\n|\t简化为代表空白字符\s。为了匹配从行首开始的数字和结束于行尾的数字,我添加了^$作为\s的替代。< / p>

相关问题