簡體   English   中英

--rep的grep如何與該文件匹配(當我不希望它匹配時)

[英]How is grep with --include matching this file (when I don't want it to)

好的,我不確定我是否理解為什么此grep行與--include選項中未包含的文件匹配。 我嘗試了多種方式進行轉義,但是似乎無法讓它完成我想要的事情。

目錄列表

ryan@ubuntu:~/dir$ ls -lR
.:
total 20
-rw-rw-r-- 1 ryan ryan   19 Sep 23 00:40 bar
-rw-rw-r-- 1 ryan ryan   19 Sep 23 06:18 bar.shit
drwxrwxr-x 2 ryan ryan 4096 Sep 23 04:51 boo
-rw-rw-r-- 1 ryan ryan    4 Sep 23 05:25 foo.txt
-rwxrwxr-x 1 ryan ryan 1597 Sep 23 06:18 rfind
lrwxrwxrwx 1 ryan ryan   13 Sep 23 00:30 ruby -> /usr/bin/ruby

./boo:
total 4
-rw-rw-r-- 1 ryan ryan  0 Sep 23 04:51 bar.foo.txt
-rw-rw-r-- 1 ryan ryan 86 Sep 23 00:44 foo
-rw-rw-r-- 1 ryan ryan  0 Sep 23 04:51 foo.txt

當我期望以下grep行匹配文件“ bar”僅與通過--include選擇的文件擴展名匹配時,運行該文件

ryan@ubuntu:~/ass2$ grep --include=*.{rb,erb,js,css,html,yml,txt} -inHR foo ./*
./bar:1:inside here is foo
./bar.shit:1:inside here is foo

我要么沒有正確地轉義,要么沒有擴展名的文件變得無效。

謝謝

發生這種情況的原因是命令末尾的glob ./*導致包括當前目錄中的所有文件,而沒有考慮--include指令。 如果將命令更改為

grep --include=*.{rb,erb,js,css,html,yml,txt} -inHR foo .
#                                                       ^- Instead of ./*

那么您應該獲得期望的輸出。

由於它是開放的,因此會隨着外殼的擴展而自我擴展。 正確的方法是:

grep --include='*.rb' --include='*.erb' --include='*.js' --include='*.css' --include='*.html' --include='*.yml' --include='*.txt' -inHR foo ./*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM