正则表达式 - 与 awk 中的字符串部分完全匹配
regex - match exactly to a string portion in awk
我有一个文件,其中一列包含由 , 分隔的字符组成的字符串
示例:
a123456, a54321, a12312
我需要在逗号分隔列表中找到包含特定数字的行。
示例:我想查找仅包含 a12345
.
的所有行
我尝试使用以下内容:
awk ' ~/a12345/ {print}'
但这会打印出包含以下内容的行:
a123456, a54321, a12312
因为正则表达式匹配 a123456
中的前 6 个字符,我猜。
我的问题是,如何制作一个只打印出仅包含完全匹配项的行的正则表达式?
尝试像下面这样使用 grep 的单词匹配:
grep -w a123456 myfile.txt
如果您需要在刚刚开始的字段中,请使用类似的东西:
egrep -w ^a123456 myfile.txt
使用 awk:
awk -F ',\s*' ' == "a12345"' filename
要沿逗号(可选地后跟空格)拆分行,并且 select 仅第一个字段恰好是 "a12345" 的那些行。即使该字段包含 "a12345" 之后算作单词边界的字符,这也将起作用,也就是说
a12345.foo, bar, baz
被过滤掉了。
如果要测试多个字段,则必须测试所有字段:
awk -F ',\s*' 'function check() { for(i = 1; i <= NF; ++i) { if($i == "a12345") return 1; } return 0 } check()' filename
$ awk '/(^|[^[:alnum:]])a12345([^[:alnum:]]|$)/' file
$ awk '/(^|[^[:alnum:]])a123456([^[:alnum:]]|$)/' file
a123456, a54321, a12312
对于 GNU awk,您可以使用单词分隔符:
$ awk '/\<a12345\>/' file
$ awk '/\<a123456\>/' file
a123456, a54321, a12312
我有一个文件,其中一列包含由 , 分隔的字符组成的字符串 示例:
a123456, a54321, a12312
我需要在逗号分隔列表中找到包含特定数字的行。
示例:我想查找仅包含 a12345
.
我尝试使用以下内容:
awk ' ~/a12345/ {print}'
但这会打印出包含以下内容的行:
a123456, a54321, a12312
因为正则表达式匹配 a123456
中的前 6 个字符,我猜。
我的问题是,如何制作一个只打印出仅包含完全匹配项的行的正则表达式?
尝试像下面这样使用 grep 的单词匹配:
grep -w a123456 myfile.txt
如果您需要在刚刚开始的字段中,请使用类似的东西:
egrep -w ^a123456 myfile.txt
使用 awk:
awk -F ',\s*' ' == "a12345"' filename
要沿逗号(可选地后跟空格)拆分行,并且 select 仅第一个字段恰好是 "a12345" 的那些行。即使该字段包含 "a12345" 之后算作单词边界的字符,这也将起作用,也就是说
a12345.foo, bar, baz
被过滤掉了。
如果要测试多个字段,则必须测试所有字段:
awk -F ',\s*' 'function check() { for(i = 1; i <= NF; ++i) { if($i == "a12345") return 1; } return 0 } check()' filename
$ awk '/(^|[^[:alnum:]])a12345([^[:alnum:]]|$)/' file
$ awk '/(^|[^[:alnum:]])a123456([^[:alnum:]]|$)/' file
a123456, a54321, a12312
对于 GNU awk,您可以使用单词分隔符:
$ awk '/\<a12345\>/' file
$ awk '/\<a123456\>/' file
a123456, a54321, a12312