查找一个文件中作为另一个文件中任何行的前缀的所有行

查找一个文件中作为另一个文件中任何行的前缀的所有行

有没有办法找到一个文件中作为另一个文件中任何行的前缀的所有行?

使用grepI 可以检查单个模式是否是任何行的前缀。例如如果file1

1
2
3

并且file2

100
10
25
55

grep '^1' file2会给我

100
10

有没有办法循环遍历行file1并检查这些行是否是行的前缀file2?在这种情况下,如果我检查输出file1中的前缀将是file2

100
10
25

答案1

将您的file1变成正确的正则表达式列表:

sed 's/^/^/' file1 >patterns

这只是将 a^作为每行的第一个字符插入。

然后将其与grep其他文件一起使用:

grep -f patterns file2

测试:

$ sed 's/^/^/' file1 >patterns
$ cat patterns
^1
^2
^3
$ grep -f patterns file2
100
10
25

没有临时模式文件:

使用理解进程替换的 shell:

grep -f <( sed 's/^/^/' file1 ) file2

在没有进程替换的 shell 中:

sed 's/^/^/' file1 | grep -f /dev/stdin file2

使用 shell 的进程重定向功能yash(使用相同的句法与上面的过程替换相同,但具有不同的语义):

grep -f /dev/stdin file2 <( sed 's/^/^/' file1 )

相关内容