将cut代码转换为grep regex代码,以定位并返回到第一个连字符
我有一个类似于以下内容的文件名列表:将cut代码转换为grep regex代码,以定位并返回到第一个连字符,regex,command-line,grep,cut,Regex,Command Line,Grep,Cut,我有一个类似于以下内容的文件名列表: 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 - 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
)时,我遇到了一些问题,也遇到了不止一个单词的名称(例如另一个名称
和第五个名称
)。您可以使用扩展的风格,使用锚定到行首并匹配每个字符,直到找到破折号,如:
grep -oE '^[^-]*' infile
它产生:
NAME
ANOTHER NAME
THIRD
FOURTH
FIFTH NAME
您可以使用扩展样式,将锚点定位到行首,并匹配每个字符,直到找到破折号,如:
grep -oE '^[^-]*' infile
它产生:
NAME
ANOTHER NAME
THIRD
FOURTH
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
此
awk
应能:
awk -F" -" '{print $1}' file
NAME
ANOTHER NAME
THIRD
FOURTH
FIFTH NAME
或
sed
版本:
sed 's/ -.*//' file
NAME
ANOTHER NAME
THIRD
FOURTH
FIFTH NAME
这会在文本后留下一个空格,不确定这是否有问题。这会在文本后留下一个空格,不确定这是否有问题。