匹配一个单词后跟一个空格,然后是BASH中的三个数字

时间:2014-11-03 03:44:56

标签: regex bash

我有一个问题,我认为这很简单,但我花了过去一小时尝试了所有的东西。

我正在尝试匹配一个字符串,后跟一个空格,后跟grep中的3个数字。

egrep hello\s\d{3}

我也尝试过旧款式:

grep hello[:blank:][0-9][0-9][0-9]

如果我将grep与hello一起使用或者连续使用行中的数字它们可以正常工作,但只要你尝试将它与空格或空格组合,grep就不会返回任何内容。

2 个答案:

答案 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:]