Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将cut代码转换为grep regex代码,以定位并返回到第一个连字符_Regex_Command Line_Grep_Cut - Fatal编程技术网

将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

这会在文本后留下一个空格,不确定这是否有问题。这会在文本后留下一个空格,不确定这是否有问题。