【问题标题】:Grep the first number in a line [duplicate]Grep 一行中的第一个数字[重复]
【发布时间】:2016-08-12 16:13:56
【问题描述】:

我有一个包含数字行的文件和一个文件:

    2    20    3    file1.txt
    93   21    42   file2.txt
    52   10    12   file3.txt

如何使用 grep、awk 或其他命令只给我每行的第一个数字,以便它只显示:

2
93
52

谢谢。

【问题讨论】:

    标签: bash awk grep


    【解决方案1】:

    你可以用这个:

    grep -oE '^\s*[0-9]+' filename
    

    要处理前导空格,我目前没有选择。你最好接受 awk 的答案。

    【讨论】:

    • 对于单个空格,您不需要第一组[ ](尽管它确实有助于提高可读性),但考虑[ \t]*\s* 可能会更好,因为我们不需要'不知道文件格式。
    • @cdarke :谢谢,我正在更新答案。
    • 没关系,我只是想要数字!
    【解决方案2】:

    您可以使用awk

    awk '{print $1}' file 
    

    【讨论】:

      【解决方案3】:

      有很多方法可以做到这一点。下面是一些(假设输入文件是gash.txt):

      awk '{print $1}' gash.txt
      

      或使用纯 bash:

      while read num rest
      do
          echo $num
      done < gash.txt
      

      或使用“经典”sed:

      sed 's/[ \t]*\([0-9]\{1,\}\).*/\1/' gash.txt
      

      或将 ERE 与 sed 一起使用:

      sed -E 's/[ \t]*([0-9]+).*/\1/' gash.txt
      

      使用cut 是有问题的,因为我们不知道空格是空格还是制表符。

      顺便说一下,如果要添加总行数:

      awk '{total+=$1} END{print "Total:",total}' gash.txt
      

      【讨论】:

      • 谢谢,你总能读懂我的心思:)
      • 另外,请注意,如果您将多个文件传递给wc,它将默认打印总计。
      猜你喜欢
      • 2021-02-03
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      相关资源
      最近更新 更多