【发布时间】:2015-04-13 11:29:06
【问题描述】:
我在list1.txt 和list2.txt 中有用户名的UTF-8 纯文本列表,每行1 个。请注意,如果相关,用户名可能包含正则表达式字符,例如! ^ . ( 等以及空格。
我想获取并保存到matches.txt 一个列表,其中包含两个 列表中出现的所有唯一值。我几乎没有命令行专业知识,但这几乎可以让我到达那里:
grep -Ff list1.txt list2.txt > matches.txt
...但这将"jdoe" 和"jdoe III" 视为匹配,返回"jdoe III" 作为匹配值。这对于任务是不正确的。我需要每行模式匹配是 整个 行,即从 ^ 到 $。我尝试添加 -x 标志,但根本没有匹配项(编辑:请参阅已接受答案的评论 - 我的标志顺序错误)。
我在 OS X 10.9.5 上,我不必使用 grep - 另一个解决问题的命令行(工具)就可以了。
【问题讨论】:
-
如果文件已排序,那么
comm -1 -2 list1.txt list2.txt可能会做你想做的事。 -
我希望能找到一个更好的副本,建议
grep -Fxf。这是一个常见问题解答,所以我确定有一个,但我找不到它。 -
好吧,我确实花了一些时间寻找 SO 答案,因为我认为这是常见问题解答,但很多事情都很接近,但回答了不同的问题(不同到无法帮助没有 shell/CL 工具经验的人)。我找到的最有用的答案是 How to grep the exact match,尽管对于上述用例来说它失败了。
-
指向建议的备用线程的链接不回答这个问题(也许有人可以删除该横幅 - 它并不能真正帮助寻找答案的人这个问题)。同样,triplee 给出的链接也没有回答这个问题。
标签: regex shell grep osx-mavericks