2017-05-19 9 views
0

grep -vは、次の文字列を含まないファイルを表示するようです。grep -v除外しないファイルを除外します

grep -v ".c"を使用すると、highscore.txtという名前のファイルは表示されません。あなたのgrepコマンドで

$ ls -1 
a.out 
easy.txt 
hard.txt 
highscores.txt 
main.c 
main.txt 
util.c 
$ ls -1 | grep -v ".c" 
a.out 
easy.txt 
hard.txt 
medium.txt 
+0

「。」は正規表現の「任意の文字」です。 –

+0

ああありがとう、多分あなたはそれを私がそれを受け入れることができるように質問への回答として書くことができる – nounoursnoir

+0

@ BenjaminWに加えて。あなたの正規表現はあなたが '.'を修正しても' * .cpp'、 '* .cs'を除外します。 '\ .c $'のようにアンカーする必要があります。 – alvits

答えて

2

".c"は正規表現で、.は「任意の文字」を意味します。私はsomething.cppのようなファイルのための偽陽性を排除するためにアンカー$「文字列の末尾を」追加しました

grep -v '\.c$' 

はこれを修正するには、

  • はピリオドをエスケープ

    することができます。これはまた、おそらくあなたが望むものではありませんこれは、something.cppを除外することを

    grep -vF '.c' 
    

    は予告:

  • は「固定文字列」のため-Fオプションを使用します。ここで

    shopt -s extglob 
    ls -1 !(*.c) 
    

    は、*.cが正規表現ではなく、.リテラル周期であり、特別な意味を持っていないグロブパターン、:

  • 使用拡張globパターンは.cで終わるものを除外します。

+0

@Drewを使うことができます。同時に編集しました。 –

関連する問題