-4

我在用着

代码 -

 grep -Ff list.txt C:/data/*.txt > found.txt

但它一直输出无效响应,行不包含我输入的电子邮件..

list.txt 包含 -

email@email.com
customer@email.com
imadmin@gmail.com
newcustomer@email.com
helloworld@yes.com

等等..电子邮件以匹配每一行,

搜索文件包含 -

user1:phonenumber1:email@email.com:last-active:recent
user2:phonennumber2:customer@email.com:last-active:inactive
user3:phonenumber3:blablarandom@bla.com:last-active:never

那么另一个可能包含 -

blublublu         email@email.com         phonenumber         subscribed
nanananana        customer@email.com      phonenumber         unsubscribed
useruser          noemailinput@noemail.com       phonenumber      pending

所以我想要做的是提供带有电子邮件列表/字符串列表“list.txt”的grep,然后搜索提供的目录以查找每个字符串的匹配项并输出包含每个匹配项的整行。

在这种情况下,输出示例是 -

user1:phonenumber1:email@email.com:last-active:recent
user2:phonennumber2:customer@email.com:last-active:inactive
blublublu         email@email.com         phonenumber         subscribed
nanananana        customer@email.com      phonenumber         unsubscribed

但它不会输出其他两行 -

 user3:phonenumber3:blablarandom@bla.com:last-active:never
 useruser          noemailinput@noemail.com       phonenumber      pending

因为该行内没有字符串。

4

2 回答 2

0

该文件list.txt可能包含空行或某些分隔符。当我添加:到 list.txt 时,第一个示例中的所有行都开始匹配。同样,添加一个空格使第二个示例中的所有行都匹配。添加@会导致相同的症状。

尝试运行grep -oFf ...(如果您的 grep 支持-o)以查看完全匹配的部分。如果 list.txt 中有空行,则匹配数将少于没有的匹配数-o。尝试搜索-o极短输出的输出以检查可疑字符串。您还可以检查 list.txt 中最短的行。

while read line ; do echo ${#line} "$line" ; done < list.txt | sort -nk1,1
于 2018-01-06T23:36:54.260 回答
0

我认为您的文件list.txt中可能有空行,导致它与指定的文件中的每一行匹配C:/data/*.txt。要修复,您可以手动删除每个空行,也可以运行标志编辑文件sed -i '/^$/d' list.txt的命令。-i

该问题也可能与dos回车有关,请尝试运行:cat -v list.txt并检查这些行是否后跟^M

email@email.com^M
customer@email.com^M

如果是这种情况,您将需要使用dos2unix或修改文件tr -d '\r' < list.txt > output.txt

于 2018-01-06T23:20:09.740 回答