Sed 第一个包含字母数字的字段的正则表达式是什么?

Sed 第一个包含字母数字的字段的正则表达式是什么?,sed,Sed,我在一个.csv文件中有这样开始的数据 “684MF7”、“684MF7”、“RN” 第一个字段“684MF7”应仅包含数字字符;第一个字段中不应出现字母字符。我对第二个字段进行了其他检查,在本例中也是“684MF7”,这是第二个字段的合法值 我想在第一个字段中找到任何alpha,然后打印这行。我调用这个sed文件 { /^".*[^0-9]*.*",/p } 使用-n和-f(用于文件名) 什么正则表达式只隔离第一个字段?我在所有事情上都得到了匹配,这不是我想要的。我的问题是因

我在一个.csv文件中有这样开始的数据

“684MF7”、“684MF7”、“RN”

第一个字段“684MF7”应仅包含数字字符;第一个字段中不应出现字母字符。我对第二个字段进行了其他检查,在本例中也是“684MF7”,这是第二个字段的合法值

我想在第一个字段中找到任何alpha,然后打印这行。我调用这个sed文件

{
        /^".*[^0-9]*.*",/p
}
使用
-n
-f
(用于文件名)


什么正则表达式只隔离第一个字段?我在所有事情上都得到了匹配,这不是我想要的。我的问题是因为我试图匹配零个或多个字母字符,而不是1个或多个字母字符吗?

通常,围绕任何其他表达式的
*
往往比预期匹配更多。尝试编写一个更详细的表达式,使用较小的通配符匹配

我发现这个有用

> sed -n '/^".*[A-Z].*",".*",".*"/p' <(echo '"684MF7","684MF7","RN"')
> "684MF7","684MF7","RN"
> sed -n '/^".*[A-Z].*",".*",".*"/p' <(echo '"684117","684MF7","RN"')
>
>sed-n'/^“*[A-Z].*”、“*”、“*”/p'、“684MF7”、“684MF7”、“RN”
>sed-n'/^“*[A-Z].*”、“*”、“*”/p”

它将收集所有被“

包围的组,也许以下内容对您有用

 echo '"A84MF7","684MF7","3N"' | sed -n '/^"[^0-9,][^",]*"/p'
 "A84MF7","684MF7","3N"

 echo '"684MF7","684MF7","7N"' | sed -n '/^"[^0-9,][^",]*"/p'
 --Nothing--
第一个字段(任何内容)将由以下人员选择:

/^"[^"]*"/
您希望字段中至少有一个字符为alpha(尽管最好将其视为“非数字”),在这种情况下,其中一个字符应选择您要查找的字符:

/^"[^"]*[A-Za-z][^"]*"/
/^"[^"]*[^0-9"][^"]*"/
/^"[^"]*[[:alpha:]][^"]*"/
/^"[^"]*[^"[:digit:]][^"]*"/
请注意,被否定的类也不能与双引号匹配(总是测试答案的一个原因-下面的脚本的第一个版本列出了两行输入)

并将其中一个转换为
sed
命令:

sed -n '/^"[^"]*[^"[:digit:]][^"]*"/p' <<EOF
"684MF7","684MF7","RN"
"684007","684MF7","RN"
EOF

sed-n'/^“[^”]*[^”[:digit:][^”]*“/p”可能是因为它很贪婪?它需要尽可能多,所以它从第一个引用一直到最后一个?谢谢,编辑得好@Lev Levitsky将拾取前三个数字?@octopusgrabbus,
/“[^0-9,][^2,][^2,][*”/p
报告出现了一个字段,如
“RN”
以非数字开头。我以为这是原始要求?我将返回并编辑OP。所有操作都发生在第一个字段中。其中的字母字符阻止已清理的.csv文件加载到Informix表中,该表要求第一个字段为整数。@octopusgrabbus,好的,添加了一个锚来拾取第一个字段为什么在方括号内重复^?它不会重复(没有
^
);它用于创建一个求反字符类。即,
[^”]
匹配除双引号(或换行符)以外的任何字符,而
[^”[:digit:]“
匹配除双引号或数字以外的任何字符。此用法与标记字符类之外的行的开头无关。
sed -n '/^"[[:digit:]]\{1,\}"/!p' <<EOF
"684MF7","684MF7","RN"
"684007","684MF7","RN"
EOF