Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Shell脚本上的正则表达式_Regex_Bash_Shell_Scripting - Fatal编程技术网

Regex Shell脚本上的正则表达式

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.

我有一个正则表达式,它在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.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_/\.]+)?)?$'