正则表达式:不是以“pattern”开头

正则表达式:不是以“pattern”开头

我的 LIST 文件中有很多行,我只想列出名称不以“git”开头(或不包含“git”)的行。

到目前为止我有:

cat LIST | grep ^[^g]

但我想要这样的东西:

#not starting by "git"
cat LIST | grep ^[^(git)]
#not containing "git"
cat LIST | grep .*[^(git)].*

但它不正确。我应该使用什么正则表达式?

答案1

grep在这种情况下使用with-P选项,将 PATTERN 解释为 Perl 正则表达式

grep -P '^(?:(?!git).)*$' LIST

正则表达式解释:

^             the beginning of the string
 (?:          group, but do not capture (0 or more times)
   (?!        look ahead to see if there is not:
     git      'git'
   )          end of look-ahead
   .          any character except \n
 )*           end of grouping
$             before an optional \n, and the end of the string

使用find命令

find . \! -iname "git*"

答案2

由于 OP 正在寻找通用正则表达式而不是专门用于 grep,因此这是不以“git”开头的行的通用正则表达式。

^(?!git).*

分解:

^行首

(?!git)后面没有跟 'git'

.*后跟 0 个或多个字符

答案3

如果你想要简单列出所有不包含 git 的行,请尝试这个

 cat LIST | grep -v git

答案4

如果你想找到“不是从 git 开始”的行,你也可以使用:

^[^git].*

相关内容