如何从列中验证字符的位置?

如何从列中验证字符的位置?

我有一列 MBI 包含 11 个字符。在这 11 个字符中:

  1. 第 2、5、8 和 9 个字符始终是字母。
  2. 字符 1、4、7、10 和 11 始终是数字。
  3. 第 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]$

相关内容