【问题标题】:How to use regular expression for letters and numbers with dashes如何对带有破折号的字母和数字使用正则表达式
【发布时间】:2017-05-11 22:36:05
【问题描述】:

所以这就是我目前在我的 shell 脚本中的内容。我不擅长正则表达式。

echo $1 | grep -E '^[A-Z]${3}|^[0-9]${4}|^[ABCD]$'

我需要这样的输入:

./dlchek.sh ACV-1319-A

这是一般格式:XYX-1111-A,其中 XYX 可以是任何字母,1111 可以是任何数字,而 A 必须是(A、B、C、D)中的任何一个。顺便说一句,我正在使用 unix。我只需要检查格式是否正确,如果正确则退出代码 0,如果不正确则退出代码 1。

这是预期的输出:其中第 3 行是唯一有效的,因为它遵循格式。

[you@blue final]$ ./dlcheck.sh ACV-13-A
[you@blue final]$ echo $?
1
[you@blue final]$ ./dlcheck.sh ACV-13119-A
[you@blue final]$ echo $?
1
[you@blue final]$ ./dlcheck.sh ACV-1319-A
[you@blue final]$ echo $?
0
[you@blue final]$ ./dlcheck.sh ACV-1319-Y
[you@blue final]$ echo $?
1

【问题讨论】:

    标签: regex unix search string-matching


    【解决方案1】:
    ^[A-Z]{3}-[0-9]{4}-[ABCD]$
    

    那些$$在里面做什么?太多的结局。还有那些管子??像我一样,使用https://regex101.com/,你每次都会学到一些东西..

    【讨论】:

    • 感谢您的快速回复。我在 regex101 中尝试了它,它有效,但在我的 .sh 中确实有效。这就是我现在拥有的: grep -E '^[A-Z]{3}-[0-9]{4}-[ABCD]$'
    • 该模式是文件中的全部内容吗?
    • 是的,这是迄今为止唯一需要检查的内容。如果弄清楚了,我将添加退出代码和循环。我实际上将它设置为一个变量。所以基本上是这样的:x=echo $1 | grep -E '^[A-Z]{3}-[0-9]{4}-[ABCD]$' echo $x 看看是否匹配
    • 我的意思是除了您要查找的内容之外,文件中还有其他内容。因为如果不是,您需要除 ^ 和 $ 之外的其他分隔符。 \b 怎么样? \s?
    • 我如何将它实现为描述中描述的格式以及我现在拥有的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多