将剪切代码转换为 grep 正则表达式代码,用于定位并返回到第一个连字符

Translate cut code to grep regex code for locating and returning up to the first hyphen

我有一个类似于以下的文件名列表:

NAME - Something something something
ANOTHER NAME - More stuff
THIRD - This is a title
FOURTH - This is a title - With an extra hyphen
FIFTH NAME - And some more

我想要的是只抓取第一个连字符之前的名称。也就是说,我的结果应该是:

NAME
ANOTHER NAME
THIRD
FOURTH
FIFTH NAME

我能够通过 cut -d'-' -f1 完成此操作,但我想知道将其转换为 grep 命令的方法是什么?

我已经尝试过像 grep -o "^[[:upper:]]* -" 这样的表达式,但是当名称中包含第二个连字符(例如 FOURTH)并且名称超过单词(例如 ANOTHER NAMEFIFTH NAME)。

您可以使用扩展风味,在行首使用锚点并匹配每个字符,直到找到破折号,例如:

grep -oE '^[^-]*' infile

它产生:

NAME 
ANOTHER NAME 
THIRD 
FOURTH 
FIFTH NAME

这个awk应该做的:

awk -F" -" '{print }' file
NAME
ANOTHER NAME
THIRD
FOURTH
FIFTH NAME

sed 版本:

sed 's/ -.*//' file
NAME
ANOTHER NAME
THIRD
FOURTH
FIFTH NAME