【发布时间】:2019-03-27 14:55:55
【问题描述】:
我有这个正则表达式,它完美地适用于https://regex101.com/(Python)上我想要的匹配模式。 问题是我需要将它集成到从 Windows 7 上的 GitBash 调用的 Shell 脚本中,但与我在线测试时相比,它没有按预期工作。
pattern='^([a-z][\-a-z0-9_/\.]*)?([A-Z]{3,10}\-[0-9]+([\-a-z0-9_/\.]+)?)?$'
用法示例:
if [[ ! $name =~ $pattern ]]; then ...
要匹配的字符串:
- abc/this-is/my.test1
- abc/ABC-12345
- ABC-12345
- ABC-12345/测试
- ABC-12345/1.0
- aabcd/ABC-123/1.0
- abcd/abc-1234
要屏蔽的字符串:
- abc/THIS-is/my.test1
- 1.0/abc/this-is/my.test1
- Abcd_10/ABCD-12345
- ABCD-12345/ABC-123
- abcd/ABCd-1234
- abc/THISISAVERYLONGEXAMPLE-1234
我的 bash 版本
$ bash --version
GNU bash, version 4.4.19(2)-release (x86_64-pc-msys)
Copyright (C) 2016 Free Software Foundation, Inc.
有人可以帮助我吗? 谢谢!
【问题讨论】:
-
您的模式即使在 Python 中也不起作用,请参阅 demo。
-
GitBash 可以访问那些能够使用正则表达式过滤文本的 Unix 实用程序:
grep和sed(至少;我很确定awk也可用) .所以答案是这样滚动:1)停止“在线”测试东西; 2)编写一个最小的shell脚本,它只是逐行读取其输入,检查一行匹配并打印它,如果是的话; 3) 制作两个文本文件——一个包含必须匹配的行,另一个包含不能匹配的行; 4) 验证第一个文件中的所有行都通过了您的脚本,并且第二个文件中的所有行都没有。 -
基本的基于 grep 的过滤循环类似于 this。
-
@WiktorStribiżew 感谢您的观察。这是描述中的错字。我更正了:regex101.com/r/jHl8KQ/2
-
原来是even worse。
标签: regex bash shell scripting