代码之家  ›  专栏  ›  技术社区  ›  ankit.vishen

如何对包含两个逗号的行进行grep

  •  0
  • ankit.vishen  · 技术社区  · 6 年前

    我有一个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
    

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

    2 回复  |  直到 6 年前
        1
  •  4
  •   hek2mgl    6 年前

    你可以用 awk 以下内容:

    awk -F, 'NF==3' file
    

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


    有了(e)grep,情况会是这样的:

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

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

        2
  •  1
  •   RavinderSingh13    6 年前

    如果您有其他行也可以有任何其他从IPS,然后下面可能有助于您检查字段的数量,以及确保第一,第二和第三个字段有IPS没有其他。

    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