将剪切代码转换为 grep 正则表达式代码,以查找并返回第一个连字符



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

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)。

这个awk应该做:

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

sed版本:

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

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

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

它产生:

NAME 
ANOTHER NAME 
THIRD 
FOURTH 
FIFTH NAME

最新更新