当文件名有空格时,如何 grep 查询所有文件的 2 个字符串?
How to grep query all files for 2 strings when filenames have spaces?
我需要查询 java 包含字符串 'rESTWSLib' 和 '500' 的文件。
这两个字符串都可以位于文档中的任何位置(即行),并且可以位于 0-无限行(位置 0-n)上的任何位置。
如何 grep 查询 'rESTWSLIB':
find -iname '*.java' -type f -exec grep -l "rESTWSLib" '{}' \; > ~/SMCrestwsList1.txt
输出:
./some/file1.java
./some/file2.java
如何 grep 查询'500':
find -iname '*.java' -type f -exec grep -l "500" '{}' \; > ~/SMCrestwsList2.txt
输出:
./some/file2.java
./some/file3.java
我需要结合两个 grep 查询(或它们的结果)所以我期待这样的结果:
./some/file2.java
我已经尝试了How to grep query all files for 2 strings
中给出的解决方案
find -iname '*.java' -type f -exec grep -l "rESTWSLib" '{}' + | xargs grep -l "500" \; > ~/SMCrestwsList3.txt
但是,由于很少有文件的名称中包含空格,因此仅给出了部分输出以及以下错误消息:
grep: ;: No such file or directory
grep: ./cdrm/bat/OpportunityManagement/Verify: No such file or directory
文件名为 'Verify something something'。
如何调整它以接受文件名中的空格?
尝试使用正则表达式:
find -iname '*.java' -type f -exec grep -lzo "rESTWSLib.*500\|500.*rESTWSLib" '{}' \; > ~/SMCrestwsList1.txt
为了成功处理带有空格的文件名,您应该使用 grep -Z
和 xargs -0
修改您的管道。这些匹配选项更改 grep
以打印由 [=14=]
字符分隔的文件名,并更改 xargs
以期望 null-separated 输入字符串。
find . -exec grep -lZ "expr_one" {} \+ | xargs -0 grep -l "expr_two"
我需要查询 java 包含字符串 'rESTWSLib' 和 '500' 的文件。 这两个字符串都可以位于文档中的任何位置(即行),并且可以位于 0-无限行(位置 0-n)上的任何位置。
如何 grep 查询 'rESTWSLIB':
find -iname '*.java' -type f -exec grep -l "rESTWSLib" '{}' \; > ~/SMCrestwsList1.txt
输出:
./some/file1.java
./some/file2.java
如何 grep 查询'500':
find -iname '*.java' -type f -exec grep -l "500" '{}' \; > ~/SMCrestwsList2.txt
输出:
./some/file2.java
./some/file3.java
我需要结合两个 grep 查询(或它们的结果)所以我期待这样的结果:
./some/file2.java
我已经尝试了How to grep query all files for 2 strings
中给出的解决方案find -iname '*.java' -type f -exec grep -l "rESTWSLib" '{}' + | xargs grep -l "500" \; > ~/SMCrestwsList3.txt
但是,由于很少有文件的名称中包含空格,因此仅给出了部分输出以及以下错误消息:
grep: ;: No such file or directory
grep: ./cdrm/bat/OpportunityManagement/Verify: No such file or directory
文件名为 'Verify something something'。
如何调整它以接受文件名中的空格?
尝试使用正则表达式:
find -iname '*.java' -type f -exec grep -lzo "rESTWSLib.*500\|500.*rESTWSLib" '{}' \; > ~/SMCrestwsList1.txt
为了成功处理带有空格的文件名,您应该使用 grep -Z
和 xargs -0
修改您的管道。这些匹配选项更改 grep
以打印由 [=14=]
字符分隔的文件名,并更改 xargs
以期望 null-separated 输入字符串。
find . -exec grep -lZ "expr_one" {} \+ | xargs -0 grep -l "expr_two"