Shell:查找多个文件中的匹配行

Pez*_*kow 5 grep

我正在尝试使用Shell脚本(以及“一个衬里”)来查找大约50个文件之间的任何常见行。 编辑:注意,我正在寻找出现在所有文件中的一行

到目前为止,我已经尝试过grep grep -v -x -f file1.sp *,它将所有其他文件中的文件内容都匹配。

我也尝试过其他方法grep -v -x -f file1.sp file2.sp | grep -v -x -f - file3.sp | grep -v -x -f - file4.sp | grep -v -x -f - file5.sp...但是我相信使用要搜索为STD的文件而不是以匹配的模式进行搜索。

有谁知道如何使用grep或其他工具执行此操作?

我不在乎是否需要花一些时间来运行,我必须向大约500个文件中添加几行代码,并希望在每个文件中找到一条共同的行以将其插入“之后”(它们最初是只需来自一个文件的c&p,所以希望有一些共同之处!)

谢谢你的时间,

ber*_*lus 2

旧的 bash 答案(O(n);打开2 * n文件)

从 @mjgpy3 的回答来看,你只需要创建一个 for 循环并使用comm,如下所示:

#!/bin/bash

tmp1="/tmp/tmp1$RANDOM"
tmp2="/tmp/tmp2$RANDOM"

cp "$1" "$tmp1"
shift
for file in "$@"
do
    comm -1 -2 "$tmp1" "$file" > "$tmp2"
    mv "$tmp2" "$tmp1"
done
cat "$tmp1"
rm "$tmp1"
Run Code Online (Sandbox Code Playgroud)

保存在 a 中comm.sh,使其可执行,然后调用

./comm.sh *.sp 
Run Code Online (Sandbox Code Playgroud)

假设所有文件名都以.sp.

更新的答案,python,仅打开每个文件一次

看看其他答案,我想给出一个每个文件打开一次而不使用任何临时文件,并且支持重复行的答案。此外,让我们并行处理文件。

给你(在 python3 中):

./comm.sh *.sp 
Run Code Online (Sandbox Code Playgroud)

将其保存到 a 中find_common_lines.py,然后调用

python ./find_common_lines.py *.sp
Run Code Online (Sandbox Code Playgroud)

该选项的更多使用信息--help