我有一个问题,我认为这很简单,但我花了过去一小时尝试了所有的东西。
我正在尝试匹配一个字符串,后跟一个空格,后跟grep中的3个数字。
egrep hello\s\d{3}
我也尝试过旧款式:
grep hello[:blank:][0-9][0-9][0-9]
如果我将grep与hello一起使用或者连续使用行中的数字它们可以正常工作,但只要你尝试将它与空格或空格组合,grep就不会返回任何内容。
答案 0 :(得分:3)
关闭两个字符(如果计算引号,则为四个字符):
grep 'hello[[:blank:]][0-9][0-9][0-9]'
如果您确定变量(而不是文件或流)是否匹配,另一方面,grep
不是正确的工具; bash内置了正则表达式评估:
str='hello 123'
re='^hello[[:blank:]][0-9]{3}$'
if [[ $str =~ $re ]]; then
echo "Match!"
fi
答案 1 :(得分:1)
您需要将[:blank:]
放入角色类。
$ grep 'hello[[:blank:]][0-9][0-9][0-9]' file
hello 123
或强>
$ grep 'hello[[:blank:]][0-9]\{3\}' file
hello 123
[0-9]\{3\}
会匹配三位或更多位数。
我如何知道这些信息?
$ grep hello[:blank:][0-9][0-9][0-9] file
grep: character class syntax is [[:space:]], not [:space:]