web-dev-qa-db-ja.com

regex:「パターン」で始まっていない

LISTファイルに多数の行があり、名前が「git」で始まらない(または含まれていない)行のみを一覧表示したい。

これまでのところ:

cat LIST | grep ^[^g]

しかし、私は次のようなものが欲しいです:

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

しかし、それは正しくありません。どの正規表現を使用する必要がありますか?

9
Vulpo

この場合grep-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*"
16
hwnd

OPは特別なgrepではなく、一般的な正規表現を探しているため、これは「git」で始まらない行の一般的な正規表現です。

^(?!git).*

壊す:

^行頭

(?!git)の後に「git」が付いていない

.*の後に0個以上の文字が続く

9
wisbucky

Gitを含まないすべての行を単純にリストしたい場合は、これを試してください

 cat LIST | grep -v git
4
dinesh