我需要从存在data2
于. 需要精确匹配。data3
data1
一切都很好,grep -f data1 data2 data3 ...
直到其中的项目data1
也以空值分隔。
仅使用换行符 -好的:
$ cat data1 1234 abcd efgh 5678 $ cat data2 1111 oooo abcd 5678 $ grep -xFf data1 data2 abcd 5678
data2
包含以 null 分隔的项目 -使用时-z
可以:$ printf '1111\0oooo\0abcd\0005678' > data2 $ grep -zxFf data1 data2 | xargs -0 printf '%s\n' abcd 5678
现在两者
data1
和data2
都包含以空分隔的项目 -失败。似乎该-z
选项不适用于指定的文件-f
:$ printf '1234\0abcd\0efgh\0005678' > data1 $ grep -zxFf data1 data2 | xargs -0 printf '%s\n' $
问题是我确实需要两个文件都有以空分隔的项目。明显的解决方法可能是(例如)一个很好的旧while
循环:
while IFS= read -rd '' line || [[ $line ]]; do
if grep -zqxF "$line" data2; then
printf '%s\n' "$line"
fi
done < data1
但是由于我有很多包含很多项目的文件,这将非常缓慢!有没有更好的方法(我不坚持使用grep
)?