假设我有两个文本文件。
第一个文件名 - “Emails.txt”,包含以下数据:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
第二个文本文件 - “Roles.txt”,包含以下字符串:
sale@
info@
all@
help@
如果第一个文本文件“Emails.txt”与第二个文本文件“Role.txt”中任何一行的字符串仅精确匹配,如何删除其中的所有行?
新文件的期望输出应该是:
[email protected]
[email protected]
我尝试使用
grep -vf Role.txt Emails.txt
但是,如果该命令与 Role.txt 的所有字符匹配,它也会删除该行。
我只想删除与 Role.txt 文件完全匹配的内容,如果所需字符串之前有其他字符,则删除所有内容。
这里有人给出了类似的解决方案,用于删除每行末尾的精确匹配字符串,但在此我需要正则表达式在每行开头都相同。
答案1
第二个文件应如下所示:
^sale@
^info@
^all@
^help@
因为^
匹配一行的开头。
您可以使用 重建文件sed -i 's/^/^/' Role.txt
。需要明确的是:这将更改文件。然后您的原始命令
grep -vf Role.txt Emails.txt
将工作。
或者,原来的 Role.txt
在支持进程替换的 shell 中(例如 Bash):
grep -vf <(sed 's/^/^/' Role.txt) Emails.txt
在这种情况下,动态sed
添加字符并且保持不变。^
Role.txt