我正在编写一个shell脚本,用于在文本文件中搜索模式。
模式是:uid-然后是一个只包含小写字母和数字的字母数字字符串。例如:uid-12ab34de
#!/bin/bash
value=$(grep -R "^uid-[a-z][0-9]" "./text.txt")
echo "$value"
我现在有几次尝试,并作为最后的手段来到这里。感谢您提前提供任何帮助!
答案 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,\}
匹配至少一次或多次出现的先例正则表达式。
*
匹配先前正则表达式的零次或多次出现。