我有一列 MBI 包含 11 个字符。在这 11 个字符中:
- 第 2、5、8 和 9 个字符始终是字母。
- 字符 1、4、7、10 和 11 始终是数字。
- 第 3 和第 6 个字符将是字母或数字
我单独写了代码。
步骤1:
cut -c 3,6 ACO_SAMPLE.txt > alphanumeric
while read line
do
if echo "$line" | grep -q '^[1-9][0-9][0-9][0-9][0-9]$'
then
echo "$line is a valid"
else
echo "$line is invalid"
fi
done < alphanumeric
rm -f alphanumeric
第2步:
cut -c 2,5,8,9 ACO_SAMPLE.txt > alphabet
while read line
do
if echo "$line" | grep -q '^[A-Z][A-Z][A-Z][A-Z]$'
then
echo "$line is a letter"
else
echo "$line is not a letter"
fi
done < alphabet
rm -f alphabet
步骤3:
cut -c 3,6 ACO_SAMPLE.txt > alphanumeric
while read line
do
if echo "$line" | grep -q '^[A-Z0-9][A-Z0-9]$'
then
echo "$line is a valid"
else
echo "$line is invalid"
fi
done < alphanumeric
rm -f alphanumeric
现在,我需要将所有代码合并为一个。我不知道该怎么做。有人能帮我吗?
答案1
您可以使用单个正则表达式进行匹配(为了清晰起见,分为多行)。您可能需要根据输入数据进行不区分大小写的匹配。
^ # Start of string
[0-9] # Number
[a-z] # Letter
[a-z0-9] # Letter or Number
[0-9] # Number
[a-z] # Letter
[a-z0-9] # Letter or Number
[0-9] # Number
[a-z] # Letter
[a-z] # Letter
[0-9] # Number
[0-9] # Number
$ # End of string
或者作为一行
^[0-9][a-z][a-z0-9][0-9][a-z][a-z0-9][0-9][a-z][a-z][0-9][0-9]$