Regex 如何从某些文本文件的顶部删除文件名
我试图在MacOSX中使用fdupes从目录中删除重复的文本文件。它已经删除了一堆重复项 我现在遇到的问题是,在剩下的文件中,有许多是重复的,除了在其中一个文件中,文件名是第一行,后面是空行,后面是文本 因此,我想找到所有文件名在顶部重复的文件,然后去掉这一行和下面的空行,以便fdupes将它们识别为重复的文件。这将允许我使用fdupes来解析它们 例如: file001.txt: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
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:除了应将$/
变量设置为已设置的值,以便代码可以按原样工作之外