获取许多类似字符串中的第一个

Uwe*_*ler 1 unix linux bash grep sed

我有形式的字符串

A-XXX
A-YYY
B-NNN
A-ZZZ
B-MMM
C-DDD
Run Code Online (Sandbox Code Playgroud)

但是,我希望在连字符之前首先出现每个字符串.所以这里的解决方案是:

A-XXX
B-NNN
C-DDD
Run Code Online (Sandbox Code Playgroud)

如何使用bash工具执行此操作?我试过uniq,但我不能在那里设置"相似性模式".

tin*_*ink 5

这还够吗?

cat uwe
A-XXX
A-YYY
B-NNN
A-ZZZ
B-MMM
C-DDD
$ awk -F'-' '!a[$1]{print $0;a[$1]++}' uwe
A-XXX
B-NNN
C-DDD
Run Code Online (Sandbox Code Playgroud)

编辑:

实际上,人们可以将其缩短为更加神秘的内容:

$ awk -F'-' '!a[$1]++' uwe
A-XXX
B-NNN
C-DDD
Run Code Online (Sandbox Code Playgroud)

我们要做的是告诉awk -是字段分隔符; !a[$1]告诉awk执行以下命令(没有给出print是默认值),并且后续递增检查是否看到值的数组.