我正在尝试定义一个正确的正则表达式来验证字段。
该字段长度为 26 个字符,可以包含:任何字母(小写或大写)、空格 ( )、逗号 (,)、连字符 (-) 或正斜杠 (/)。
我尝试了几种组合,但仍然没有得到我需要的结果。我需要该程序来评估该字段是否符合正则表达式规则,如果不符合,我需要它向我显示不符合的字符。
这就是我得到的:
awk '
function showChars(fieldIn) {
split(fieldIn,chars,"")
for ( i=1; i<=length(chars)+1; i++ ) {
if (chars[i] !~ regex) {
print "Invalid char found:" chars[i]
}
}
}
BEGIN {
FS=""
FIELDWIDTHS="4 4 26"
regex="([a-zA-Z]*)|([\-|\s|\/|\,]*)"
}
{
if ( $3 !~ /regex/ ) {
print "Line " NR ": Problem in field"
print "$3:"$3
showChars($3)
next
} else {
print "Line " NR ": OK"
next
}
}
' $filename
此特定代码输入 if,但 then 不打印任何字符。 已尝试了许多其他正则表达式组合:转义元字符、不转义它们、使用/不使用 |、使用/不使用 []、复制粘贴 26x 而不是 * 等。
输入文件名示例: !!!!----JOHN,DOE/-SMITH $*(4+4+26 个字符字段后的文件结尾)
该计划应该:
这可能是您正在尝试做的,未经测试的,使用 GNU 进行多个扩展:
awk '
function showchar(fieldIn, chars,numChars,i) {
numChars = split(fieldIn,chars,"")
for ( i=1; i <= numChars; i++ ) {
if ( chars[i] !~ chrRegex ) {
print "Invalid char found:" chars[i]
}
}
}
BEGIN {
FIELDWIDTHS="4 4 26"
chrRegex = "[[:alpha:][:space:],/-]"
fldRegex = "^(" chrRegex "){26}$"
}
{
if ( $3 ~ fldRegex ) {
print "Line " NR ": OK"
}
else {
print "Line " NR ": Problem in field"
print "$3:"$3
showchar($3)
}
}
' "$filename"
您的
showchar
功能可能只是:
function showchar(fieldIn) {
print "Invalid char(s) found:" gensub(chrRegex,"","g",fieldIn)
}