Regex Shell脚本上的正则表达式
我有一个正则表达式,它在Python上完美地工作在我想要的匹配模式上。 问题是我需要将它集成到一个Shell脚本中,这个脚本是在Windows7上从GitBash调用的,但与我在线测试它时相比,它并没有按照预期工作Regex Shell脚本上的正则表达式,regex,bash,shell,scripting,Regex,Bash,Shell,Scripting,我有一个正则表达式,它在Python上完美地工作在我想要的匹配模式上。 问题是我需要将它集成到一个Shell脚本中,这个脚本是在Windows7上从GitBash调用的,但与我在线测试它时相比,它并没有按照预期工作 pattern='^([a-z][\-a-z0-9_/\.]*)?([A-Z]{3,10}\-[0-9]+([\-a-z0-9_/\.]+)?)?$' 用法示例: if [[ ! $name =~ $pattern ]]; then ... 要匹配的字符串: abc/这是/my.
pattern='^([a-z][\-a-z0-9_/\.]*)?([A-Z]{3,10}\-[0-9]+([\-a-z0-9_/\.]+)?)?$'
用法示例:
if [[ ! $name =~ $pattern ]]; then ...
要匹配的字符串:
abc/这是/my.test1
abc/abc-12345
ABC-12345
ABC-12345/测试
ABC-12345/1.0
aabcd/ABC-123/1.0
abcd/abc-1234
要阻止的字符串:
abc/这是/my.test1
1.0/abc/this-is/my.test1
Abcd_10/Abcd-12345
ABCD-12345/ABC-123
abcd/abcd-1234
abc/THISISAVERYLONGEXAMPLE-1234
我的bash版本
有人能帮我吗?
谢谢 这只是Python和GNU/Bash之间的一点语法变化 您只需将模式更改为:
pattern='^([a-z][-a-z0-9_/\.]*)?([A-Z]{3,10}\-[0-9]+([-a-z0-9_/\.]+)?)?$'
最后,我只是删除了集合开头“-”前面的“\”,例如[-a-z0-9\/”,而不是[-a-z0-9\/”您的模式即使在Python中也不起作用,请参见。GitBash可以访问能够使用正则表达式筛选文本的常用Unix实用程序:grep和sed;我很确定awk也可以使用。所以答案是这样:1停止在线测试;2编写一个最小的shell脚本,它只需逐行读取输入,检查一行是否匹配并打印(如果匹配);3制作两个文本文件,一个是必须匹配的行,另一个是不能匹配的行;4验证第一个文件中的所有行都通过您的脚本,而第二个文件中的所有行都不通过。基本的基于grep的过滤循环类似于。@WiktorStribiżew感谢您的观察。这是描述中的一个错误。我纠正了它:是的。我想它对你合适吗?如果是这样的话,你可以给别人一些有用的答案来感谢他们,并从中选择任何一个答案。
pattern='^([a-z][-a-z0-9_/\.]*)?([A-Z]{3,10}\-[0-9]+([-a-z0-9_/\.]+)?)?$'