【发布时间】:2016-12-29 14:01:18
【问题描述】:
我遇到了正则表达式的问题,因为我必须接受 Unix 中某些文件的多个可能值。如果模式匹配是Case A,否则是Case B。即:
echo a | grep "^[a\|b\|c]$"
echo a | grep "^[b\|a\|c]$"
echo b | grep "^[a\|b\|c]$"
echo c | grep "^[a\|b\|c]$"
echo typeA | grep "^[typeA\|typeB]$"
echo typeA | grep "^[typeA\|typeB\|c]$"
echo typeA | grep "^[typeA\|typeB]$"
echo typeA | grep "^[typeA\|typeB]$"
通过这些示例,我得到以下输出
a
a
b
c
(empty)
(empty)
(empty)
(empty)
我真的不知道为什么在案例 5、6、7 和 8 中,我没有得到答案。
“原码”:
ls *.CTL > $ArchivosControl
for i in $(cat $ArchivosControl); do
pattern=`echo $i | grep '^fixedvalues[0-9]\{7\}_[OptionA1\|OptionA2\|OptionA3]_fixedvalues_[OptionB1\|OptionB2]\.CTL$'`
if [ "$pattern" != "" ]; then
Cantidad_Control=$((Cantidad_Control+1))
echo $pattern >> $List
else
echo "It doesn't match for $i"
fi
done
编辑 2016-10-13 20:30
kennytm 的答案适用于 Linux:
echo t | grep "^[typeA\|typeB]$"
但我需要它在 Unix 服务器(特别是 AIX)中工作
echo P_typeA_123 | grep "^P_(typeA\|typeB)_[0-9]\{3\}$"
可选文本是我需要验证的主要表达式。
编辑 2016-10-14 14:52
在字符串的最后,我想搜索是否存在“C”或“H”。我应该使用 () 还是 []。即:
echo P_typeA_123N | grep -E "^P_(typeA\|typeB)_[0-9]\{3\}[N|H]$"
echo P_typeA_123N | grep -E "^P_(typeA\|typeB)_[0-9]\{3\}(N|H)$"
我已经证明了这两个选项,但我不能选择一个。
PD:'grep -E' 等于 'egrep'?我找不到区别。
【问题讨论】: