有没有办法找到一个文件中作为另一个文件中任何行的前缀的所有行?
使用grep
I 可以检查单个模式是否是任何行的前缀。例如如果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 )