如何使用 awk 匹配前面没有数字的字符串?

如何使用 awk 匹配前面没有数字的字符串?

我有一个文件,其中第二列如下所示:

37M533N38M
14M1170N45M233N16M
3S45M3N35M

我想提取那些包含的字符串3N 之前没有其他数字3。例如,A3N会匹配但23N不会匹配。还应该注意的是,3N永远不会单独出现,并且字符串不会以 开头3N,也不会以 结尾3N。结果应该是上面的第三行:

3S45M3N35M

我怎样才能在 awk 中做到这一点?我已经尝试过$2 ~ /3N/,但这肯定行不通。

答案1

您可以使用否定字符类:[^0-9]表示“除数字之外的任何字符”:

awk '$2~/[^0-9]3N/' file

如果您还想匹配 is 位于3N字段最开头的情况,因此前面没有字符,请使用:

awk '$2~/(^|[^0-9])3N/' file

如果您只想打印第二个字段而不是整行,请使用:

awk '$2~/[^0-9]3N/{print $2}' file

或者

awk '$2~/(^|[^0-9])3N/{print $2}' file

答案2

使用 grep:

grep [^0-9][3][N] file

v- 显示那些不匹配/反向匹配

[0-9][3][N]- 查找前面有正整数的 3N 的模式。

答案3

使用以下命令进行测试,对于上面的示例效果很好

awk '$2 ~ /[A-Za-z]3N/{print $0}' filename

相关内容