我有一个文件,其中一列包含由字符分隔的字符串, 例如:
a123456, a54321, a12312
我需要在逗号分隔列表中找到包含特定数字的行。
示例:我想查找仅包含a12345
的所有行。
我尝试使用以下内容:
awk ' $1~/a12345/ {print}'
但这会打印出包含以下内容的行:
a123456, a54321, a12312
因为正则表达式匹配a123456
中的前6个字符,我猜。
我的问题是,如何创建一个仅打印出仅包含完全匹配的行的正则表达式?
答案 0 :(得分:1)
$ awk '/(^|[^[:alnum:]])a12345([^[:alnum:]]|$)/' file
$ awk '/(^|[^[:alnum:]])a123456([^[:alnum:]]|$)/' file
a123456, a54321, a12312
使用GNU awk,你可以使用单词分隔符:
$ awk '/\<a12345\>/' file
$ awk '/\<a123456\>/' file
a123456, a54321, a12312
答案 1 :(得分:0)
尝试使用grep的单词匹配,如下所示:
grep -w a123456 myfile.txt
如果你需要刚开始的领域,那么使用类似的东西:
egrep -w ^a123456 myfile.txt
答案 2 :(得分:0)
使用awk:
awk -F ',\\s*' '$1 == "a12345"' filename
要沿着逗号分割该行(可选地后跟空格)并仅选择第一个字段正好为“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