将剪切代码转换为 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 NAME
和 FIFTH 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
我有一个类似于以下的文件名列表:
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
)。
您可以使用扩展风味,在行首使用锚点并匹配每个字符,直到找到破折号,例如:
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