正则表达式匹配唯一ID

时间:2015-05-05 12:15:34

标签: regex string shell scripting pattern-matching

我正在编写一个shell脚本,用于在文本文件中搜索模式。

模式是:uid-然后是一个只包含小写字母和数字的字母数字字符串。例如:uid-12ab34de

#!/bin/bash
value=$(grep -R "^uid-[a-z][0-9]" "./text.txt")
echo "$value"

我现在有几次尝试,并作为最后的手段来到这里。感谢您提前提供任何帮助!

2 个答案:

答案 0 :(得分:1)

使用

#!/bin/bash
value=$(grep -R "^uid-[a-z0-9]+$" "./text.txt")
echo "$value"

你的正则表达式选择了一个小写字母后跟一个数字。此外,它将接受仅具有有效uid作为前缀的字符串(即以非法/不支持的字符结尾)。后者可能是故意的,如果是这样的话,请放弃$

答案 1 :(得分:0)

试试这个:

value=$(grep -ER "^uid-[a-z0-9]+" "./text.txt")

-E使用ERE(扩展正则表达式)

您也可以在BRE(基本正则表达式)模式下执行此操作(对于GNU grep):

value=$(grep -R "^uid-[a-z0-9]\+" "./text.txt")

或者:

value=$(grep -R "^uid-[a-z0-9]\{1,\}" "./text.txt")

如果您想要与BRE一起使用,那么:

value=$(grep -R "^uid-[a-z0-9]*" "./text.txt")

但即使uid的id部分为空(如uid-

,这也会匹配

一点解释:

+\+ \{1,\}匹配至少一次或多次出现的先例正则表达式。

*匹配先前正则表达式的零次或多次出现。