我有一个类似于以下内容的文件名列表:
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 NAME
和FIFTH 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