我正在使用
代码 -
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
所以我尝试做的就是向grep提供一系列电子邮件/字符串列表" list.txt"然后搜索为每个字符串的匹配项提供的目录,并输出包含每个匹配项的整行。
这种情况下的输出示例是 -
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
因为该行内没有字符串。
答案 0 :(得分: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
修改文件。
答案 1 :(得分: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