从文件中删除孤立行

时间:2018-08-17 07:19:55

标签: shell duplicates find

我使用fdupes列出重复的文件。例如:

./topic/org-batch/.svn/pristine/45/45e578cf6c4723c6853b788e6ae35c1705fe9b19.svn-base
./topic/org-batch/Makefile

./topic/org-batch/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode-bak.el

./topic/org-batch/.svn/pristine/2a/2a87de13f3959748235f2a9735b0d7da40ef8545.svn-base
./topic/org-batch/bin/orgmk-stow-orgmk.mk

./home/.emacs.d/elpa/auctex-12.1.1/COPYING
./home/.emacs.d/elpa/org-plus-contrib-20180813/COPYING

./topic/org-batch/.svn/pristine/1e/1ebac4e8f3174f5da74469ad0bf5714ed901233e.svn-base
./topic/org-batch/bin/orgmk-init

但是,上述某些文件(SVN中的副本)是正常的重复文件。

因此,我从.git.svn目录中删除了这些合法副本:

fdupes -r . \
    | grep -v "/.svn/" \
    | grep -v "/.git/" \
    | uniq

但是我在报告中有一些孤立的行:

./topic/org-batch/Makefile

./topic/org-batch/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode-bak.el

./topic/org-batch/bin/orgmk-stow-orgmk.mk

./home/.emacs.d/elpa/auctex-12.1.1/COPYING
./home/.emacs.d/elpa/org-plus-contrib-20180813/COPYING

./topic/org-batch/bin/orgmk-init

我不必在意……因为它们不是副本,我必须删除。

如何删除仅由一行组成的那些块?

目标报告:

./topic/org-batch/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode.el
./home/.emacs.d/lisp/sword-mode-bak.el

./home/.emacs.d/elpa/auctex-12.1.1/COPYING
./home/.emacs.d/elpa/org-plus-contrib-20180813/COPYING

1 个答案:

答案 0 :(得分:1)

awk可能会有所帮助。您可以通过在输入以及输出记录分隔符(ORS)中重置变量记录分隔符(RS)和字段分隔符(FS)来重新定义分隔行(记录)或行中字段的内容。如果将它们设置为将双换行符(\ n \ n)作为记录分隔,将单个换行符(\ n)作为字段分隔,则可以通过检查大于1的字段数来查找包含多个换行符的每条记录(NF> 1 )。这些应该恰好是您的代码块,包含多行:

awk 'BEGIN {RS="\n\n";ORS="\n\n";FS="\n"}  {if(NF>1) print}' 

在这里查看示例awk variables

PS: 如果最后一行的末尾有\ n,则可能是一个问题。