【发布时间】:2013-03-04 07:18:41
【问题描述】:
我有一个包含很多行的文件,我想用 Linux 命令只显示每行的第一个单词。
我该怎么做?
【问题讨论】:
-
它被问了一百万次,可以做一百万次。下次尝试搜索。投票结束。
-
我确定有重复,但我认为建议的不是一个很好的匹配。
我有一个包含很多行的文件,我想用 Linux 命令只显示每行的第一个单词。
我该怎么做?
【问题讨论】:
尝试使用grep 执行此操作:
grep -Eo '^[^ ]+' file
【讨论】:
你可以使用awk:
awk '{print $1}' your_file
这将“打印”your_file 中的第一列 ($1)。
【讨论】:
cat;我想我至少会展示如何在管道命令中使用它(但我确实提到它为此目的有点矫枉过正=P)。
尝试使用 coreutils cut 执行此操作:
cut -d' ' -f1 file
【讨论】:
我看到已经有答案了。但是你也可以用 sed 来做到这一点:
sed 's/ .*//' fileName
【讨论】:
上述解决方案似乎适合您的具体情况。对于您的问题的更一般应用,请考虑通常将单词定义为由空格分隔,但不一定是专门的空格字符。例如,您文件中的列可能是制表符分隔的,甚至可以由制表符和空格混合分隔。
前面的示例对于查找空格分隔的单词都很有用,而只有 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]
【讨论】:
\s 可以方便地救援:grep -Po '^\s*\K\S+' …
...或在 Windows 上(如果您有 GnuWin32 grep):
grep -Eo "^[^ ]+" file
【讨论】: