我正在尝试使用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,所以希望有一些共同之处!)
谢谢你的时间,
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.
看看其他答案,我想给出一个每个文件打开一次而不使用任何临时文件,并且支持重复行的答案。此外,让我们并行处理文件。
给你(在 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。