第一个文件内容与另一个文件部分匹配并写入第三个文件

第一个文件内容与另一个文件部分匹配并写入第三个文件

给定文件 1...

2/26a- 6
23/26a- 20z
23/26A-18

和文件 2...

2/26a-6
23/26a- 20Z
23/26A-18
25/2a -18
22/34B-19

如何在文件 2 中搜索文件 1 的内容?这里的输出应该是:

2/26a-6
23/26a- 20Z
23/26A-18

(所以不完全匹配,但有一些共享内容)。匹配应不区分大小写。

答案1

给你:

tr -d " \t\r" < file1 > X

tr -d " \t\r" < file2 > Z

进而:

grep --ignore-case -Fxf X Z

完毕!

答案2

您可以修改 file1 的内容,以将一个或多个空白字符的序列替换为表示零个或多个空白字符的正则表达式:

sed 's/[[:space:]]\{1,\}/[[:space:]]*/g' file1
2/26a-[[:space:]]*6
23/26a-[[:space:]]*20z
23/26A-18

然后将其用作不区分大小写的 grep 的模式文件:

sed 's/[[:space:]]\{1,\}/[[:space:]]*/g' file1 | grep -if- file2
2/26a-6
23/26a- 20Z
23/26A-18

注意:只有当您的条目file1不包含其他特殊字符时,此方法才有效 - 如果包含,则需要对它们进行适当的转义。

相关内容