如何 grep 所有结果,使得子模式可能包含也可能不包含在目标模式中?

如何 grep 所有结果,使得子模式可能包含也可能不包含在目标模式中?

假设我搜索了如下结果的字符串

anything1.knownKeyWord
anything2.knownKeyWord
anything3[1].knownKeyWord

我如何为 grep 编写通用语法,使其匹配所有 3 个字符串。我已经这样做了

^.*\w+\d[\[]?[0]?[\]]?\.knownKeyWord.*$  

但我认为对于索引 例如[1]没有以良好的方式编写,我怎样才能实现,以便即使我替换[1][2342jdsjf],我也不必对语法进行太多更改。

答案1

使用扩展正则表达式:

$ grep -E '[[:alnum:]_]+[[:digit:]]+(\[[^]]+\])?\.knownKeyWord' <file
anything1.knownKeyWord
anything2.knownKeyWord
anything3[1].knownKeyWord

这将提取包含格式上的字符串的任何行

XXXNNN[YYY].knownKeyWord

或者

XXXNNN.knownKeyWord

其中XXX是任何非空字母数字字符串(也可能包括_),NNN是任何(一个或多个)数字字符串,并且YYY是不包括 的任何内容]

grep-xif 匹配使用完整的线路-w如果匹配应该是完整的,则使用(即不作为其他东西的子串)。


只是用来sed显示正则表达式的每个部分匹配的内容:

$ sed -E 's/([[:alnum:]_]+)([[:digit:]]+)(\[[^]]+\])?(\.knownKeyWord)/<\1><\2><\3><\4>/' <file
<anything><1><><.knownKeyWord>
<anything><2><><.knownKeyWord>
<anything><3><[1]><.knownKeyWord>

答案2

尝试这个,

grep -w 'knownKeyWord$' file.txt

man

-w, --word-正则表达式

          Select  only  those  lines containing matches that form whole words.  The test is that the matching substring must either be at the beginning of the line, or
          preceded by a non-word constituent character.  Similarly, it must be either at the end of the line or followed by a non-word  constituent  character.   Word-
          constituent characters are letters, digits, and the underscore.

相关内容