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

时间:2013-02-15 15:07:49

标签: regex perl text duplicates

我正在尝试在Mac OSX中使用fdupes从目录中删除重复的文本文件。它已经删除了一堆重复。

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

所以,我想找到所有在顶部重复文件名的文件,然后剥去这个和下面的空白行,这样fdupes就会将它们识别为重复项。这将允许我使用fdupes来解析它们。

示例:

file001.txt:

test 123
test

file002.001.txt:

file002.001.txt

test 123
test

最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

也许是这样的

perl -0777 -pi -e 's#\Q$ARGV\E$/{2}##' *.txt

$ARGV包含文件名。 $/是您的输入记录分隔符 - 您可能需要使用\n或任何行结尾。由于$/包含斜杠,因此我们将s///的分隔符更改为其他内容,在本例中为#\Q ... \E转义是为了使文件名中的某些元字符不会搞砸任何内容。

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

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