是否可以仅使用模式而不使用-v选项来排除(e)grep中的确切单词。例如,由于()
将模式或确切的字符串()分组,所以我认为egrep [^(main)]
将匹配没有确切的单词main
的子字符串,但是发生的是它排除了字母{{1} }。我仍在用bash学习正则表达式。
答案 0 :(得分:1)
您可以使用此否定的前瞻正则表达式来拒绝包含main
作为整个单词的行,而不必一定使用-v
。
grep -P '^(?!.*\bmain\b).*$' bash.txt
在这里,-P
启用Perl regular expression
之前是名为bash.txt的文件的内容,
hello 123
hello world
hello main world
some main text
some mainly text
在执行上述命令后,它将打印此输出,
hello 123
hello world
some mainly text
答案 1 :(得分:0)
原因
egrep [^(main)]不包括字母m,a,i,n。
是[^(main)]与括号中不包含的单个字符匹配,不仅排除了m,a,i,n,而且还排除了(和)。您可以找到此功能here的正确用法。
实际上,已经有一个类似的StackOverflow问题。它具有几种形式的否定性超前预测。 ^((?!main).)*$
可能是其中之一,可以满足您的需求。
答案 2 :(得分:0)
idk(是否需要),但可以借用@Pushpesh's example,然后使用任何POSIX awk:
$ awk '!/(^|[^[:alpha:]])main([^[:alpha:]]|$)/' file
hello 123
hello world
some mainly text
或使用GNU工具确定单词边界:
$ awk '!/\<main\>/' file
hello 123
hello world
some mainly text
$ sed '/\<main\>/d' file
hello 123
hello world
some mainly text