正则表达式 - 匹配满足条件的单词

时间:2017-02-26 19:26:47

标签: regex bash shell unix regex-negation

我有一个问题需要解决:

我需要匹配每个少于4个字符的单词,期望单词i,j,k和pom.I使reg exp找到大小小于4的所有单词 - [a-zA-Z] {1 ,3}但我不知道如何排除i,j,k和pom。我需要在一个reg exp中做到这一点。

非常感谢答案

2 个答案:

答案 0 :(得分:0)

这样的东西?

$ cat b.txt
abcdef
abcd
abc
pom.
pom
i,j,k

$ grep -E '^([a-z]{1,3}|pom.|i,j,k)$' b.txt
abc
pom.
pom
i,j,k

说明:
*以上测试匹配行,您可以像-E -w -o一样修改它以匹配行中的单词 *默认情况下,词pom将匹配,因为它的长度为3 =小于4 *单词pom.(以点结尾)将被排除,但由于正则表达式或操作(符号|

而保存

更新

$ grep -E '^([a-z]{1,3}|pom.|i|j|k)$' b.txt

答案 1 :(得分:0)

更新
(?i)\b(?!pom|[ijk]\b)[a-z]{1,3}\b

 (?i)                     # Inline modifier, case-insensitive
 \b                       # word boundary
 (?! pom | [ijk] \b )     # Assert not 'pom' nor single i, j or k
 [a-z]{1,3}               # 1 to 3 letters a-z
 \b                       # word boundary