我的 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].*