【问题标题】:How to display the first word of each line in my file using the linux commands?如何使用 linux 命令显示文件中每一行的第一个单词?
【发布时间】:2013-03-04 07:18:41
【问题描述】:

我有一个包含很多行的文件,我想用 Linux 命令只显示每行的第一个单词。

我该怎么做?

【问题讨论】:

  • 它被问了一百万次,可以做一百万次。下次尝试搜索。投票结束。
  • 我确定有重复,但我认为建议的不是一个很好的匹配。

标签: linux shell grep


【解决方案1】:

尝试使用 执行此操作:

grep -Eo '^[^ ]+' file

【讨论】:

    【解决方案2】:

    你可以使用awk:

    awk '{print $1}' your_file
    

    这将“打印”your_file 中的第一列 ($1)。

    【讨论】:

    • post 已编辑,为什么在给出好的解决方案的同时给出错误的解决方案?这是对 cat 的无用使用:partmaps.org/era/unix/award.html#cat
    • 他在问题中指定了cat;我想我至少会展示如何在管道命令中使用它(但我确实提到它为此目的有点矫枉过正=P)。
    【解决方案3】:

    尝试使用 coreutils cut 执行此操作:

    cut -d' ' -f1 file
    

    【讨论】:

      【解决方案4】:

      我看到已经有答案了。但是你也可以用 sed 来做到这一点:

      sed 's/ .*//' fileName
      

      【讨论】:

        【解决方案5】:

        上述解决方案似乎适合您的具体情况。对于您的问题的更一般应用,请考虑通常将单词定义为由空格分隔,但不一定是专门的空格字符。例如,您文件中的列可能是制表符分隔的,甚至可以由制表符和空格混合分隔。

        前面的示例对于查找空格分隔的单词都很有用,而只有 awk 示例还可以查找由其他空白字符分隔的单词(事实上,这在各种 sed/grep 版本中很难统一执行) .您可能还希望通过修改 awk 语句来显式跳过空行:

        awk '{if ($1 !="") print $1}' your_file
        

        如果您还担心空字段 的可能性,即以空格开头 的行,那么需要一个更强大的解决方案。我对 awk 不够熟练,无法为这种情况生成一个单行代码,但一个简短的 python 脚本可能看起来像:

        >>> import re
        >>> for line in open('your_file'):
        ...     words = re.split(r'\s', line)
        ...     if words and words[0]:
        ...         print words[0]
        

        【讨论】:

        • 实际上 perl 正则表达式在 grep 中广泛使用,\s 可以方便地救援:grep -Po '^\s*\K\S+' …
        【解决方案6】:

        ...或在 Windows 上(如果您有 GnuWin32 grep):

        grep -Eo "^[^ ]+" file
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-05
          • 1970-01-01
          • 1970-01-01
          • 2011-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多