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

标签 regex linux terminal

我想在 Linux 终端中使用 egrep 找到所有分隔的单词(这意味着两个空格之间的字符),它们是十进制数字,包括加号和减号。

我的解决方案:

(?<= |\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

最佳答案

egrep 不支持环视断言。但是,GNU grep 使用 -P 开关提供与 perl 兼容的正则表达式:

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

请注意,您可以将 |\n|\t 简化为 \s,它代表 whitespace character。为了匹配行首开始的数字和行尾结束的数字,我添加了 ^$ 作为 的替代项\s.

关于regex - 在 Linux 终端中使用带有 egrep 的正则表达式查找数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33802409/

相关文章:

java - 如何将文本文件与多个正则表达式模式进行匹配并计算这些模式的出现次数?

c++ - 如何在 Linux 上分析我的 C++ 应用程序

c - 在 X 时间运行 Bash 命令并终止 X 时间

linux - 汇编项目,在 Intel i386 架构上使用 YASM 将行号添加到文本中

terminal - tmux 命令在创建窗口时不起作用?

javascript - 为什么嵌套括号会导致此正则表达式中出现空字符串?

Javascript 替换不带特殊字符的精确匹配

regex - 我如何替换在 linux 中特定文件夹中找到的所有电子邮件地址

mysql - Bash脚本创建数据库

php - 如何使用 PHP-CLI 获取光标位置?