在文本文件中查找重复记录

在文本文件中查找重复记录

我有这种结构的文本文件

mv /XXX/20000/XXX-18245 /XXX/20000/XXX-28042
mv /XXX/10000/XXX-9942 /XXX/10000/XXX-18166
mv /XXX/10000/XXX-9962 /XXX/10000/XXX-18189
mv /XXX/20000/XXX-10007 /XXX/20000/XXX-18245

我想在第一行和第四行找到重复的 XXX-18245 记录

答案1

使用 Notepad++


  • Ctrl+F
  • 找什么:XXX-(\d+)[\s\S]+?\K\b\1\b
  • 查看 环绕
  • 查看 正则表达式
  • 取消选中 . matches newline
  • Find next

解释:

XXX-        # literally XXX-
(\d+)       # group 1, 1 or more digits
[\s\S]+?    # 1 or more any character including linebreaks, not greedy
\K          # forget all we have seen until this position
\b          # word boundary, make sure to match the exact same number
\1          # backreference to group 1
\b          # word boundary, make sure to match the exact same number

截屏:

在此处输入图片描述

答案2

在 notepad++ 中,您可以使用如下所示的正则表达式,它将突出显示从第一个匹配的开始到第二个匹配的结束的整个文本。

  • 按 CTRL+F
  • 查找什么类型(\/XXX[^ ]+)( .*)\1
  • 确保同时检查“正则表达式”和“.匹配换行符”
  • 按“查找下一个”

在此处输入图片描述

答案3

您会考虑使用 PowerShell 吗?如果您不知道如何运行 PowerShell,请按 Win+R 调出运行菜单并输入 PowerShell 然后按 Enter,我建议将 PowerShell 固定到任务栏以便于访问。如果您使用的是 Linux,只需搜索 PowerShell 7.1 并下载、安装和运行,它是开源的并且跨平台。

然后,一旦 PowerShell 运行(并接受命令),复制并粘贴以下代码:

Get-Content "$txt" | Select-String -Pattern "XXX-18245" -AllMatches | Foreach-Object {$_.Matches}

您必须将 $txt 替换为 txt 文件的完整路径(为此,在 Windows 上按 shift+rmb 然后选择复制为路径,如果您使用的是 Linux,请忽略本教程)或先通过运行 $txt="path"(使用实际路径,而不是“path”,并且必须用双引号括起来......)将路径分配给 $txt,然后按 Enter(抱歉,但大多数人不知道如何做所有这些)

它应该只显示包含匹配项的行(在本例中为 XXX-18245)

第一部分获取文件的内容然后将其传递到管道,第二部分读取第一部分的结果并查找包含给定字符串的所有行,您不需要第三部分来运行它,但这会显示很多不相关的信息,第三部分使命令仅显示匹配的行。

相关内容