Regex 如何从某些文本文件的顶部删除文件名

Regex 如何从某些文本文件的顶部删除文件名,regex,perl,text,duplicates,Regex,Perl,Text,Duplicates,我试图在MacOSX中使用fdupes从目录中删除重复的文本文件。它已经删除了一堆重复项 我现在遇到的问题是,在剩下的文件中,有许多是重复的,除了在其中一个文件中,文件名是第一行,后面是空行,后面是文本 因此,我想找到所有文件名在顶部重复的文件,然后去掉这一行和下面的空行,以便fdupes将它们识别为重复的文件。这将允许我使用fdupes来解析它们 例如: file001.txt: test 123 test file002.001.txt: file002.001.txt test 123

我试图在MacOSX中使用fdupes从目录中删除重复的文本文件。它已经删除了一堆重复项

我现在遇到的问题是,在剩下的文件中,有许多是重复的,除了在其中一个文件中,文件名是第一行,后面是空行,后面是文本

因此,我想找到所有文件名在顶部重复的文件,然后去掉这一行和下面的空行,以便fdupes将它们识别为重复的文件。这将允许我使用fdupes来解析它们

例如:

file001.txt:

test 123
test
file002.001.txt:

file002.001.txt

test 123
test

最好的办法是什么?

也许是这样的

perl -0777 -pi -e 's#\Q$ARGV\E$/{2}##' *.txt
$ARGV
包含文件名
$/
是您的输入记录分隔符--您可能需要使用
\n
或任何行尾。由于
$/
包含斜杠,我们将
s//
的分隔符更改为其他分隔符,在本例中为
#
\Q\E
escape用于确保文件名中的某些元字符不会弄乱任何东西

-0777
开关使perl一次读取整个文件,这样我们就可以在一个正则表达式中匹配多行


-i
开关将进行就地编辑。您可以添加后缀以保留备份,但在许多文件上使用时,这可能不实用。但是,我建议您不要使用
-I
开关,直到您确定一切都按照您的要求进行,并只打印到标准输出。

我不是这方面的专家,但我想通过使用命令行工具,如
sed
diff
等,您可以更轻松地达到目标。好的,让我确保我理解正确。如果我的行分隔符是\n,它应该像:perl-0777-pi-e的#\Q$ARGV\e\n{2}##'*。txt@Zug这是正确的。请记住,更改是不可逆的,所以请先试用。@Zug:除了应将
$/
变量设置为已设置的值,以便代码可以按原样工作之外