我想将所有路径文件存储在文件中,其中包含文件内容的特定提取,其中 file containsAAA
但 NOT BBB
。
我尝试了很多事情,但这次尝试接近我的目标:
find /data/my_project -type f -name "*.php" -exec grep -q "AAA" {} \; -exec grep -L "BBB" {} \; -exec awk '/AAA/{print $NF}'> /tmp/tables_names.txt {} \; -print > /tmp/class_list.txt
但是...结果包含有时仅包含文件AAA
,AAA
并且BBB
..
编辑 :
这与以下问题几乎相同查找包含一个字符串且不包含另一个字符串的文件但如果没有经过验证的答案,那就真的很难阅读。我的答案的 75% 实际上是抱歉...但是,我不仅想返回匹配的文件路径,还想返回该匹配文件的摘录(一段文本)!
答案1
*.php
查找文件名与包含但不包含/data/my_project
的文件名匹配的所有常规文件,并将其路径名存储在:AAA
BBB
/tmp/class_list.txt
find /data/my_project -type f -name '*.php' \
-exec grep -qF 'AAA' {} ';' \
! -exec grep -qF 'BBB' {} ';' \
-print >/tmp/class_list.txt
答案2
find
+awk
解决方案:
find /data/my_project -type f -name "*.php" -exec \
awk '/AAA/{ a=1 }/BBB/{ b=1 }END{ exit (!a || (a && b)) }' {} \; -print > /tmp/class_list.txt
答案3
尝试这个 :
find /data/my_project -type f -name '*.php' -exec \
bash -c 'grep -q AAA "$1" && ! grep -q BBB "$1" && echo "$1"' -- {} \; \
> /tmp/class_list.txt
答案4
find .... -name '*.php' \
-exec awk -v RS="\0" '/AAA/ && !/BBB/{print FILENAME}' {} \; > out