Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Bash正则表达式,多个条件_Regex_Bash_Grep - Fatal编程技术网

Regex Bash正则表达式,多个条件

Regex Bash正则表达式,多个条件,regex,bash,grep,Regex,Bash,Grep,我应该如何处理正则表达式以满足以下要求: 以“a”开头,第二个字符不能是元音,文件名中至少应有一个数字 很明显,我的问题是把数字做对 我解决了这个问题,但我认为这不是最好的方法:echo$list | egrep'^a[^aeiou]'.[0-9]{1,}' 注意,您应该引用变量:echo“$list”|…… 这是一个很好的方法。第二个表达式可能更简单:只需匹配一个位数,就可以删除{1,} 还有两种可能性: echo $list | egrep '^a[^aeiou][0-9]' 我解决了这个

我应该如何处理正则表达式以满足以下要求:

以“a”开头,第二个字符不能是元音,文件名中至少应有一个数字

很明显,我的问题是把数字做对

我解决了这个问题,但我认为这不是最好的方法:
echo$list | egrep'^a[^aeiou]'.[0-9]{1,}'

注意,您应该引用变量:
echo“$list”|……

这是一个很好的方法。第二个表达式可能更简单:只需匹配一个位数,就可以删除
{1,}

还有两种可能性:

echo $list | egrep '^a[^aeiou][0-9]'
我解决了这个问题,但我认为这不是最好的方法:
echo$list | egrep'^a[^aeiou]'.[0-9]{1,}'

注意,您应该引用变量:
echo“$list”|……

这是一个很好的方法。第二个表达式可能更简单:只需匹配一个位数,就可以删除
{1,}

还有两种可能性:

echo $list | egrep '^a[^aeiou][0-9]'
基本上你就快到了,缺少的部分是匹配你想要匹配的数字周围的其他字符


基本上,您就快到了,缺少的部分是匹配您想要匹配的数字周围的其他字符。

由于您的问题标题提到了bash正则表达式,下面介绍如何使用它们而不是
grep

echo "$list" | egrep '^a[^aeiou]\(.*[0-9].*\)?'
而IFS=read-r name;做
[[“$name”=~^a([0-9]|[^aeiou].[0-9])]&&printf“%s\n”“$name”;

完成由于您的问题标题提到bash正则表达式,下面介绍如何使用这些正则表达式而不是
grep

echo "$list" | egrep '^a[^aeiou]\(.*[0-9].*\)?'
而IFS=read-r name;做
[[“$name”=~^a([0-9]|[^aeiou].[0-9])]&&printf“%s\n”“$name”;

这样做对你自己来说是一个很好的锻炼。你应该继续努力。试着问自己这样一个问题:既然你写的正则表达式不起作用,那么它与什么匹配呢?你能用精确的语言解释一下正则表达式的作用吗?解决这个问题的另一种方法是把它分解成碎片。试一试第三件事:你能写一个正则表达式来检查一个字符串是否至少包含一个数字吗?忽略前两个条件,只处理第三个条件。“我的问题显然是把数字处理对了。”显然不是:
a9
遵守规则,但不匹配。你想这样
echo$list | egrep[:alpha:[0-9]
是指bash正则表达式还是grep
grep
不是bash,bash有自己的正则表达式引擎。这是一个很好的练习。你应该继续努力。试着问自己这样一个问题:既然你写的正则表达式不起作用,那么它与什么匹配呢?你能用精确的语言解释一下正则表达式的作用吗?解决这个问题的另一种方法是把它分解成碎片。试一试第三件事:你能写一个正则表达式来检查一个字符串是否至少包含一个数字吗?忽略前两个条件,只处理第三个条件。“我的问题显然是把数字处理对了。”显然不是:
a9
遵守规则,但不匹配。你想这样
echo$list | egrep[:alpha:[0-9]
是指bash正则表达式还是grep
grep
不是bash,bash有自己的正则表达式引擎。这与“a1”不匹配是真的,如果这是一个要求,你可以做echo$list | egrep'^a[^aeiou](.[0-9].*)这与“a1”不匹配是真的,如果这是一个要求,你可以做echo$list | egrep'^a[^aeiou](.[0-9].*)
while IFS= read -r name; do 
    [[ "$name" =~ ^a([0-9]|[^aeiou].*[0-9]) ]] && printf "%s\n" "$name"; 
done <<< "$list"