31

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

我怎样才能做到这一点?

4

6 回答 6

44

执行此操作:

grep -Eo '^[^ ]+' file
于 2013-03-15T14:21:05.390 回答
42

您可以使用awk

awk '{print $1}' your_file

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

于 2013-03-15T14:20:22.720 回答
13

尝试这样做coreutils cut

cut -d' ' -f1 file
于 2013-03-15T14:24:10.610 回答
3

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

sed 's/ .*//' fileName
于 2013-03-15T14:21:44.247 回答
2

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

前面的示例对于查找以空格分隔的单词都很有用,而只有 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]
于 2013-03-15T19:36:35.967 回答
0

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

grep -Eo "^[^ ]+" file
于 2013-12-19T23:37:14.153 回答