使用AWK或SED获取每行的第一个单词?

7

我有一个像这样的文本文件:

aaaa bbbb cccc
dddd eeee ffff
gggg hhhh iiii
...
..
.

我该如何使用 awksed 创建一个只包含每行第一列的文本文件呢?
aaaa
dddd
gggg
...
..
.

我看到了类似的话题,但是我无法解决我的问题!


2
可能是仅打印字符串中的第一个字段的重复问题。 - Sundeep
可能是重复的问题:如何从CSV文件中获取每行的第一列? 或者 https://dev59.com/qWIj5IYBdhLWcg3wuHTP 或者 https://dev59.com/iGsy5IYBdhLWcg3w0RQ5 - Jedi
2个回答

10
如果您的输入如下:
aaaa bbbb cccc
dddd eeee ffff
gggg hhhh iiii
而您所需要的输出是:
aaaa
dddd
gggg
那么可以使用以下任意一种方式来完成:
awk NF=1       input.file
sed 's/ .*//'  input.file
cut -d' ' -f1  input.file

3
使用 awk:通过将字段数设置为1:
awk '{NF=1}1' inputfile   

利用grep和环视:
grep -oP '^.[^ ]+' inputfile

使用sed反向引用:

sed -r 's/(^.[^ ]+).*/\1/' inputfile

为什么在sed和grep模式的开头要加上“.”? - Mischa
@mischa,这里的点表示任何字符,所以^表示行开头后跟任何字符。 - P....
是的,我知道它的意思;我困惑的是你为什么要用它。对于这个示例输入来说,它是多余的。对于允许一个字符的第一个字段的输入,它会失败。我相信你有原因...但是是什么呢? - Mischa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接