我想search
所有文件包含文本“hello
“,但exclude
结果包含“test
“。
以下是示例文件:
mkdir -p /tmp/test
cd /tmp/test
echo "foo hello" > foo.txt
echo "bar world" > bar.txt
echo "test hello" >> bar.txt
echo "world hello" >> bar.txt
以下是“hello”的搜索:
# find /tmp/test -type f -name '*' -exec grep -H -i "hello" {} \;
/tmp/test/bar.txt:test hello
/tmp/test/bar.txt:world hello
/tmp/test/foo.txt:foo hello
现在我想从上面的搜索输出中排除“test”:
# find /tmp/test -type f -name '*' -exec grep -H -i "hello" {} \; | grep -v "test"
...Nothing here...
尝试其他模式:
# find /tmp/test -type f -name '*' -exec grep -H -i "hello" -v "test" {} \;
grep: test: No such file or directory
/tmp/test/bar.txt:bar world
grep: test: No such file or directory
以下是预期输出:
# find /tmp/test -type f -name '*' -exec grep [commands argumensts here] {} \;
/tmp/test/bar.txt:world hello
/tmp/test/foo.txt:foo hello
如何在文件中查找search
和exclude
?
3条答案
按热度按时间zlwx9yxi1#
使用awk代替grep:
iqxoj9l92#
问题是文件路径中有
test
。您可以匹配
:
之后的内容,但只有在文件文本中没有:
时才能匹配。示例:
nwlqm0z13#
您可以使用awk,它可以非常快速地解析文件内容。
给出输出
但是...请注意,3个拒绝行转到stderr。如果您将stdout重定向到一个文件,则该列表中将只有好文件的列表。