我使用 grep -f 在目录中搜索与我提供的文件中的字符串匹配的文件。下面是我使用的命令
$find $(pwd) -type f |grep -f list.txt >result.txt
我正在使用 $pwd 并 find 在将文件写入 result.txt 时显示文件的完整路径
当我运行此命令时,我似乎返回了工作目录及以下的每个文件。
List.txt 包含(这是“输入”):
AAA_ERROR_2023_02_21.zip
ABA_ERROR_2023_02_23.zip
ACA_ERROR_2023_02_21.zip
AAA_LOG_2023_02_21.zip
输入来自我复制并粘贴的 Excel 列表(我使用简单的 grep 搜索文件名确认文件存在)。输入是 list.txt 中的内容
输出:
//returns almost everything in the sub directories
预期输出:
sampledirectory/parent/02/21/testfile_example_AAA_ERROR_2023_02_21.zip
sampledirectory/parent/02/23/testfile_example_ABA_ERROR_2023_02_23.zip
sampledirectory/parent/02/21/testfile_example_ACA_ERROR_2023_02_21.zip
sampledirectory/parent/02/21/testfile_example_AAA_LOG_2023_02_21.zip
我已经尝试过 |fgrep -wf list.txt 以及带有 -o 的其他变体,
文件中的“_”是否可能弄乱了模式?或者我的搜索列表是否可能不够具体?如能提供任何帮助,我们将不胜感激
答案1
此处的问题是由 Microsoft 添加的零长度字符串引起的。制作 grep 将使用的文本文件时要小心。
根据 harrymc 的说法“以回车符+换行符终止的行可能会产生空行(零长度字符串),而 grep 在每个文件中找到这些空行...”