LISTファイルに多数の行があり、名前が「git」で始まらない(または含まれていない)行のみを一覧表示したい。
これまでのところ:
cat LIST | grep ^[^g]
しかし、私は次のようなものが欲しいです:
#not starting by "git"
cat LIST | grep ^[^(git)]
#not containing "git"
cat LIST | grep .*[^(git)].*
しかし、それは正しくありません。どの正規表現を使用する必要がありますか?
この場合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*"
OPは特別なgrepではなく、一般的な正規表現を探しているため、これは「git」で始まらない行の一般的な正規表現です。
^(?!git).*
壊す:
^
行頭
(?!git)
の後に「git」が付いていない
.*
の後に0個以上の文字が続く
Gitを含まないすべての行を単純にリストしたい場合は、これを試してください
cat LIST | grep -v git