我正在寻找一个命令或脚本来执行以下操作 - 给定:
文件1.txt:
abcd
efgh
ijkl
mnop
Run Code Online (Sandbox Code Playgroud)
文件2.txt:
123abcd123
123efgh123
123mnop123
Run Code Online (Sandbox Code Playgroud)
我想要一个执行以下操作的命令:
ungrep file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)
并返回以下内容:
ijkl
Run Code Online (Sandbox Code Playgroud)
换句话说,它给了我 file1.txt 中的行,这些行不会在 file2.txt 的 grep 上返回任何结果。我知道我可以通过遍历 file1.txt,为每一行 grepping file2.txt 并存储结果,并输出结果为空的任何行来做到这一点,但我希望有一种更有效的方法来做到这一点。
iru*_*var 18
使用 GNUgrep以下应该可以工作。使用该-f选项,file1.txt作为“模式文件”传递 - 但也作为数据文件再次传递。用于-o仅报告匹配的部分。最后提取那些只匹配一次的单词 - 这些对应于file1.txt在file2.txt.
grep -h -o -f file1.txt file2.txt file1.txt | sort | uniq -u
ijkl
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 10
你可以这样做awk:
awk '
NR == FNR {w[$0]; next}
{for (i in w) if (index($0,i)) delete w[i]}
END {for (i in w) print i}' file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)
通过使用index,我们正在寻找子字符串而不是匹配正则表达式。
因为我们一找到匹配就从数组中删除这个词,所以我们避免了不必要的搜索。
| 归档时间: |
|
| 查看次数: |
2494 次 |
| 最近记录: |