在使用grep命令搜索以特定字符开头和结尾的单词

12

如何使用grep查找以某个字符开始和结束的内容

ABC-0
ABC-1
ABC-10
ABC-20

我想使用grep -v命令来查找不包含ABC-0和ABC-1的内容。

3个回答

11

如果您想匹配单词,请使用\b作为单词定界符,像这样:

\b[A-Za-z]-\d+\b

来自这个参考文献

\b - 匹配一个单词字符(任何与\w相匹配的内容)和一个非单词字符(任何与[^\w]\W相匹配的内容)之间的位置,并且如果字符串的第一个字符和/或最后一个字符是单词字符,则也会匹配字符串的开头和/或结尾。


2
虽然您可以使用“grep -P”在某些版本的grep中获得PCRE行为,但\b存在错误并且不可靠;特别是,它无法将制表符识别为单词边界字符(在GNU grep 2.6.3中'\b/www\n'会出错)。如果这个问题得到解决,那将是最简洁的答案(我希望它能够正常工作!)。 - Brian C
1
当你想要识别由空格或其他标点符号分隔的单词时,使用\b是很有用的,可以将像“word1,word2”这样的内容拆分开来。而有时你可能更喜欢使用^$只在空格处进行拆分,并匹配像“file.ext”这样的单词。 - Agostino

9

不太清楚你的意思。如果你想在开头有一个字符,并且结尾是两个数字,你可以使用以下代码:

^[A-Za-z].*\d\d$

如果你只想要一个连字符和一个数字,可以使用以下代码:

-单个数字。

^[A-Za-z].*-\d$

如果您不关心有多少位数字(一个或多个),但必须有连字符,请使用:

^[A-Za-z].*-\d+$

如果以上都不是您想要的,请提供更多信息... 您问题的第一句话与后面的内容不太相符。

你忘记了 [A-Za-z] 的量词。 - Gumbo
或者说,我在此之后忘记了其他事情 - 我们不知道 A00-10 是否可接受。不过问题已经解决了,谢谢。 - Jon Skeet

5

举个例子

egrep -v "^(ABC)-(0|1)$"

答案就是这个。对于常见情况,请参考Jon的回答。

^标记模式的开头,$标记结尾。|表示或。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接