首页 > 解决方案 > 如何grep包含两个逗号的行

问题描述

我有一个 IP 文件,每行都有两个或三个逗号分隔的 IP,例如 -

ip x 171.48.179.64, 194.88.105.83, 10.121.15.191
ip x 122.176.17.76, 194.88.105.83, 10.121.15.191
ip x 223.179.196.169, 10.121.15.135
ip x 157.41.161.64, 10.121.15.135
ip x 49.14.160.119, 10.121.15.191
ip x 157.41.230.108, 10.121.15.191
ip x 101.208.189.88, 194.88.105.83, 10.121.15.191
ip x 180.215.137.150, 194.88.105.83, 10.121.15.191
ip x 157.41.161.64, 10.121.15.191
ip x 157.41.161.64, 10.121.15.191

所以我想 grep 包含两个逗号(三个 IP)的行,比如 -

ip x 171.48.179.64, 194.88.105.83, 10.121.15.191
ip x 122.176.17.76, 194.88.105.83, 10.121.15.191
ip x 101.208.189.88, 194.88.105.83, 10.121.15.191
ip x 180.215.137.150, 194.88.105.83, 10.121.15.191

我搜索了很多,但没有得到任何具体的答案,请帮助我。

标签: regexlinuxawkgrep

解决方案


您可以使用awk

awk -F, 'NF==3' file

-F,将分隔符设置为,. NF是一个包含字段数量的特殊变量。如果满足条件NF==3,awk 将打印当前行。


使用 (e)grep 会是这样的:

grep -E '^([^,]+,){2}[^,]+$' file

我个人会使用 awk,因为它更具可读性。


推荐阅读