Bash 如何使用ubuntu命令行在文件夹中递归查找重复行?

Bash 如何使用ubuntu命令行在文件夹中递归查找重复行?,bash,Bash,我试图在一个文件夹及其子文件夹中递归地找到重复的行(一行接一行)。使用ubuntu命令行 我使用的命令如下: sudo grep -liRZP --color '(src\=\"https\:\/\/).*(\/wp-content\/.*\.png\")' --exclude=\*{.sql,_log,.log,backup*,.*backup*,Backup*,.*Backup*,BACKUP*,.*BACKUP*,.png} . | xargs -0 sed -i[backup] -e '

我试图在一个文件夹及其子文件夹中递归地找到重复的行(一行接一行)。使用ubuntu命令行

我使用的命令如下:

sudo grep -liRZP --color '(src\=\"https\:\/\/).*(\/wp-content\/.*\.png\")' --exclude=\*{.sql,_log,.log,backup*,.*backup*,Backup*,.*Backup*,BACKUP*,.*BACKUP*,.png} . | xargs -0 sed -i[backup] -e 's_\(src\=\"\)https\:\/\/.*\(\/wp-content\/.*\.png\"\)_\1\2_gp'
在最近的过去,但在一开始我肯定犯了错误。因此,我现在发现,我有许多文件,显示双重线。例如,它们看起来像这样:

<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.get_permalink(2320).'"><span><img src="/wp-content/uploads/2017/06/info.png" class="menu-icon"></span>Information & FAQ</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.get_permalink(2320).'"><span><img src="/wp-content/uploads/2017/06/info.png" class="menu-icon"></span>Information & FAQ</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "overview")).'"><span><img src="/wp-content/uploads/2017/06/preview.png" class="menu-icon"></span>Overview<$
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "overview")).'"><span><img src="/wp-content/uploads/2017/06/preview.png" class="menu-icon"></span>Overview<$
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "sales")).'"><span><img src="/wp-content/uploads/2017/06/sale.png" class="menu-icon"></span>Sales</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "sales")).'"><span><img src="/wp-content/uploads/2017/06/sale.png" class="menu-icon"></span>Sales</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "impressions")).'"><span><img src="/wp-content/uploads/2017/06/impression.png" class="menu-icon"></span>Imp$
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "impressions")).'"><span><img src="/wp-content/uploads/2017/06/impression.png" class="menu-icon"></span>Imp$
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "payments")).'"><span><img src="/wp-content/uploads/2017/06/payment-history.png" class="menu-icon"></span>P$
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "payments")).'"><span><img src="/wp-content/uploads/2017/06/payment-history.png" class="menu-icon"></span>P$
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "creatives")).'"><span><img src="/wp-content/uploads/2017/06/promotion.png" class="menu-icon"></span>Promot$
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "creatives")).'"><span><img src="/wp-content/uploads/2017/06/promotion.png" class="menu-icon"></span>Promot$
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "profile")).'"><span><img src="/wp-content/uploads/2017/06/edit-pro.png" class="menu-icon"></span>Edit Prof$
<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.getLinkab(array("sub" => "profile")).'"><span><img src="/wp-content/uploads/2017/06/edit-pro.png" class="menu-icon"></span>Edit Prof$
但这带来了一个错误:

grep: Invalid back reference
我还尝试:

sudo grep -iRP --color '\(^.*$\)\1'
错误:

grep: reference to non-existent subpattern

有人能帮我吗?如何最好地删除重复行?

快速识别文件:

find . -type f | parallel --tag 'diff {} <(uniq {})'
仅查看大于10个字符且包含字符串“a href”的行:

myuniq() {
  perl -ne 'if($last eq $_ and /a href/ and length($_) > 10) {
    # Dont print
    1;
  } else {
    print;
  }
  $last=$_;' "$@"
}
export -f myuniq

find . -type f | parallel --tag 'diff {} <(myuniq {})'
# cp the file first to conserve permissions
find . -type f | parallel 'cp -a {} {}.old; cat {}.old | myuniq > {}'
myuniq(){
perl-ne'if($last eq$\uu和/a href/和长度($\uu)>10){
#不要打印
1.
}否则{
印刷品;
}
$last=$\'“$@”
}
出口-f myuniq
找到-类型f | parallel--标记'diff{}{}'

如果整行重复,请参见
uniq
了解一个选项。但是如何在我的案例中递归使用
uniq
?我会
shopt-s globstar
,然后使用
***.html
(或任何合适的模式)。但是传统的方法是基于
find-名称'*.html'-type f-print0 | xargs-0
感谢您的提示。我以前从未使用过
shopt
,但从我的阅读来看,我看不出这对我有什么帮助?你能解释一下吗?我现在认为是
grep。。。xargs。。。。sed
造成了“混乱”(当然是我;-()所以再次修复它应该是一样的。我不知道grepping等的作用。但是我可以告诉你
***.html
的作用:它提供了所有文件的路径(递归)使用扩展名
.html
。也许这不是您需要的;也许有更多的扩展名。但这似乎是一个很好的第一步。我对解决方案进行了一些微调。但是它仍然给了我许多我不需要的结果。大多数(如果不是全部的话)非常短。例如,
*
*
只包含一个
*
的两个LIN。我如何告诉解决方案只输出特定长度的行。例如,一行中至少12个字符?
sudo find.-maxdepth 4-类型f-mtime-5 | parallel-标记'diff-bBw{}。谢谢。
“…以保留权限”
-->好的观点!1.为什么我的第一个代码
sudo grep-liRZP-color'(src\=\'https\:\/\/).*(\/wp content\/.\.\/.\.png\)-排除=\*{.sql、.log、.png}.\124; xargs-0 sed-i[backup]-e's\\\\.(src\=\\\\\\\\\)https\:\/\\/.\\\\\.\/.\(\/wp content\/.\/.\.\\\\.png\)_\1\2\u gp'
创建了一个备份文件,即使是未被
sed
更改的文件也不例外2.为什么所有权和修改日期的行为不同?(执行后,我得到了例如:(a)
picture.jpg
旧用户:组
新修改日期
(b)
picture.jpg[备份]
新组
旧修改日期
。为什么?两者大小相同。1.
sed
始终进行备份-无论是否更改。2.不确定。
find . -type f | parallel 'cp {} {}.old; cat {}.old | uniq > {}'
myuniq() {
  perl -ne 'if($last eq $_ and /a href/ and length($_) > 10) {
    # Dont print
    1;
  } else {
    print;
  }
  $last=$_;' "$@"
}
export -f myuniq

find . -type f | parallel --tag 'diff {} <(myuniq {})'
# cp the file first to conserve permissions
find . -type f | parallel 'cp -a {} {}.old; cat {}.old | myuniq > {}'