我正在使用find命令搜索具有某些扩展名的某些文件。我想在最后使用grep命令来忽略某些文件。
我的未完成命令是:
find . -type f \( -name "*.txt" -or -name "*.html" -or -name "*.css" -or -name "*.js" -or -name "*.yml" \) | grep ..
假设我想忽略2个文件:cards.js和radios-and-checkboxes.css
如何使用grep命令实现它?我知道有一些方法没有使用grep命令,但我想知道如何使用grep。
我已经寻找了不同的解决方案,但大多数提到排除单词或文件扩展名或使用find命令来执行类似的任务。
您可以使用grep的-v标志来实现此目的。为了从结果中排除一个这样的项目:
your commands here | grep -v "cards.js"
如果你想链接多个grep匹配,请执行以下操作:
yourcommands here | grep -v -e "cards.js" -e "radios-and-checkboxes.css"`
如果你想要与grep中的字符串完全匹配,请使用-w
。因此,要与“cards.js”完全匹配,请使用:grep -v -w -e "cards.js"
。使用-w
一次将适用于多个扩展。
你在问grep -v
$ echo -e "a\nb\nc" | grep -v b
这打印除了b
之外的所有内容
使用“-e”排除多个匹配,
$ echo -e "a\nb\nc" | grep -v -e a -e b
这不包括a
和b
在-E
中使用-v
(扩展)和grep
(反向匹配):
find ... | grep -v -E 'cards\.js|radios-and-checkboxes\.css'
|
字符是OR
运算符。
没有find
的纯grep
解决方案:
find . -type f \( \( -name "*.txt" -o -name "*.html" -o -name "*.css" -o -name "*.js" -o -name "*.yml" \) -a ! -name "radios-and-checkboxes.css" -a ! -name "cards.js" \)