【问题标题】:Searching for strings contained in file1 that are NOT FOUND in file2搜索 file1 中包含但在 file2 中未找到的字符串
【发布时间】:2017-02-19 11:42:39
【问题描述】:

我正在尝试运行搜索命令以从 file1 中查找字符串并在 file2 中找到它们。然后,我只想打印 file1 中未在 file2 中找到的字符串。

File1 类似于:

 read
 write
 access

文件 2 将是:

0xFF88 T write
0xFF87 t xyzwrite
0xFF86 T read
0xFF85 T xyzread
0xFF84 T xyzaccess

所以想要的结果是:

 access

*** 请注意,我确实在 File1 中的所有字符串中添加了一个空白,以便不包括作为另一个字符串一部分的字符串的每次出现。

我试过了:

grep -vf file1 file2 

并从 file2 中获取除写入和读取行之外的所有结果,包括地址。

我试过了:

grep -vf file2 file1 

并获取所有 file1,因为 file2 的整行从未出现在 file1 中。

我试过了:

diff file1 file2 | grep \^|<

并让所有 file1 在每一行都以

有人告诉我,如果我可以删除 file2 中每一行的前 8 个字符,那么 diff/grep 命令就可以工作。

我还尝试了具有各种选项的 findstr (Windows),但还是无法正常工作。

另外,请注意每个文件的行数比我显示的要多。

有什么想法吗?

【问题讨论】:

  • 如果 file1 有其他文本,请添加虚拟字符串,否则给出的解决方案可能对您不起作用...并说明要比较 file1 和 file2 之间的哪些列..

标签: linux string search grep findstr


【解决方案1】:

你可能需要做一个循环:

for i in $(cat File1); do
  grep -q "\<$i\$" File2 || echo $i
done

这将打印出来:

access

【讨论】:

  • 感谢您的帮助。上面每次都打印 $i,因此它基本上打印了所有 File1。我有点困惑,因为前几个似乎什么都没有打印,但随后打印了所有内容,并且所有前导空白都被删除了。
  • File2 中有尾随空格吗?这可能会导致它。一种解决方案:grep -q "\&lt;$i *\$" File2
猜你喜欢
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
相关资源
最近更新 更多