我如何grep行包含两个逗号

时间:2018-07-03 06:17:21

标签: regex linux awk 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

所以我想对包含两个逗号(三个IP)的行进行grep表示-

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

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

3 个答案:

答案 0 :(得分:4)

您可以使用awk

awk -F, 'NF==3' file

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


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

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

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

答案 1 :(得分:1)

如果您还有其他行,这些行可能还包含IP以外的任何内容,那么下面的内容可能会帮助您检查字段数,并确保第1、2和3rd个字段没有其他IP。

awk -F, 'NF==3 && \
$1 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ && \
$2 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ && \
$3 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/'  Input_file

答案 2 :(得分:0)

你也可以使用循环

while read -r line
do
    count=${line//[^,]};
    
    if [ ${#count} == 2 ];
    then 
        echo "${line}";
    fi
done < your.file