假设我搜索了如下结果的字符串
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
与-x
if 匹配使用完整的线路。-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.