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