echo $list | egrep '^a[^aeiou][0-9]'
我应该如何处理正则表达式以满足以下要求:
以'a'开头,第二个字符不能是元音,文件名中至少应有一个数字。
我的问题显然是让数字正确。
答案 0 :(得分:2)
我解决了它,但我认为这不是最佳方式:
echo $list | egrep '^a[^aeiou]' | egrep '[0-9]{1,}'
注意,您应引用变量:echo "$list" | ...
这是一个很好的方法。第二个表达式可以更简单:您需要匹配的只是一个数字,因此您可以删除{1,}
另外两种可能性:
list="foo
alpha
a9
aa0
alpha1"
grep '[0-9]' <<< "$list" | grep '^a[^aeiou]' # same as yours
grep -E '^a([0-9]|[^aeiou].*[0-9])' <<< "$list"
grep -P '^a(?=.*\d)[^aeiou]' <<< "$list"
while read line; do
[[ $line =~ ^a([0-9]|[^aeiou].*[0-9]) ]] && echo "$line"
done <<< "$list"
所有那些输出
a9
alpha1
答案 1 :(得分:1)
由于您的问题标题提到了bash正则表达式,以下是使用这些而不是grep
的方法:
while IFS= read -r name; do
[[ "$name" =~ ^a([0-9]|[^aeiou].*[0-9]) ]] && printf "%s\n" "$name";
done <<< "$list"
答案 2 :(得分:0)
echo "$list" | egrep '^a[^aeiou]\(.*[0-9].*\)?'
基本上你几乎就在那里,缺少的部分是为了匹配你想要匹配的数字周围的其他角色。