grep -v排除了不应该排除的文件

时间:2017-05-19 18:32:19

标签: bash grep

在我看来,grep -v显示的文件不包含以下字符串。

使用grep -v ".c"

时,如何显示名为highscore.txt的文件
$ 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

1 个答案:

答案 0 :(得分:2)

grep命令中的".c"是正则表达式,.表示“任何字符”。

要解决此问题,您可以

  • 逃离时期:

    grep -v '\.c$'
    

    我添加了“字符串结尾”锚点$,以排除something.cpp等文件的误报。

  • 对“固定字符串”使用-F选项:

    grep -vF '.c'
    

    请注意,这也会排除something.cpp,这可能不是您想要的。

  • 使用扩展的glob模式排除以.c结尾的任何内容:

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

    在这里,*.c不是正则表达式,而是一个glob模式,其中.是一个文字句点,没有特殊含义。