linux下分割字符串已经如何正则匹配日期与IP

linux下分割字符串已经如何正则匹配日期与IP,第1张

你这个可用多个方法,最简单的可用grep

s="Connections: authenticated: 10.0.115.172::56498, as admin (Full access)"

echo $s | grep -E -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+::[0-9]+"

结果

10.0.115.172::56498

这个正则相关的学习,对于学习Linux来说也是非常重要的,刘老师的新书《linux就该这么学》,关于这块讲解得非常透彻,你可以翻阅查看一下。

1、直接用mv移动命令

mv a**.cpp b**.c

#移动以a开头.cpp文件并重命名成以b开头.c文件2、用文本处理工具awk *** 作

ls a*.cpp | awk '{n=$0sub(/^a/,"b")sub(/\.cpp$/,".c")system("mv "n" "$0)}'

#ls命令查看所有a开头的.cpp文件,然后|(管道符)传递到awk命令处理,用sub实现第一个位置的替换^a以a开头的替换成b开头。3、用for循环字符串截取方法

for filename in a*.cpp

do

len=${#filename}

newName="b"${filename:1:len-3}

mv $filename $newName

done4、用sed的正则表达式替换

for filename in a*.cpp

do

newName=`echo $filename|sed -r 's/^a(.*\.c)pp$/b\1/'`

#匹配以a开头以.c结尾的文件,然后替换成b

mv $filename $newName

done

最简单的正则 如 : \d-\d-\d

但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题.....

对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。

UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。

先考虑与年份无关的前三条规则,年份可统一写作

(?!0000)[0-9]

下面仅考虑月和日的正则

1. 包括平年在内的所有年份的月份都包含1-28日

(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])

2. 包括平年在内的所有年份除2月外都包含29和30日

(0[13-9]|1[0-2])-(29|30)

3. 包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日

(0[13578]|1[02])-31)

合起来就是除闰年的2月29日外的其它所有日期

(?!0000)[0-9]-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)

接下来考虑闰年的实现

1 : 四年一闰

([0-9](0[48]|[2468][048]|[13579][26])

2 : 百年不闰,四百年再闰

(0[48]|[2468][048]|[13579][26])00

3 : 合起来就是所有闰年的2月29日

([0-9](0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)

四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则

^((?!0000)[0-9]-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9](0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$

考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。

^(?:(?!0000)[0-9]-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9](?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7375844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存