如何在另一个文本中提取文本中的行

时间:2018-06-26 01:03:40

标签: batch-file text notepad++ text-editor

这很棘手,已经搜索了几个小时,我找不到任何有用的方法:(

我不在乎如何操作,powershell,批处理,npp ++或任何软件,但这是我想要做的:

我有一个文本文件text1.txt,其中包含2888行。另一个文件text2.txt的行数为3440行,但是在第二个文件中,已经比第一个文件中的行数精确了2888。

所以我要从text2.txt中“删除”我的text1.txt的2888行,只保留其余行“唯一”。

4 个答案:

答案 0 :(得分:3)

这是两行的批处理;您可以使用findstr比较两个文件。

findstr /V /G:text1.txt /L /X text2.txt >text3.txt
move /y text3.txt text2.txt

/G从text1.txt获取搜索字符串
/V返回所有除了那些字符串
/L指示text1.txt中的行应按原义使用,而不是作为正则表达式使用(仅当行包含正则表达式使用的符号(例如[和{{1})时,才需要这样做}或]
$与实线匹配,因此“石头”不会被“一个”拾起

数据被存储在一个临时文件中,因为立即重定向到text2.txt会擦除该文件。创建临时文件后,/X会覆盖旧文件,move会执行此操作,而不会询问您是否确定要覆盖该文件。

答案 1 :(得分:1)

使用记事本++,您可以轻松地做到这一点。

您需要在记事本++上将text1.txt的数据复制到text2.txt。

合并后,您可以在搜索和替换对话框中使用此regex(> Notepad ++ 6):

^(.*?)$\s+?^(?=.*^\1$)

,什么也不要替换。这将使所有重复的行中文件中的最后一次出现。 您需要检查选项“正则表达式”和“。匹配换行符”:

答案 2 :(得分:1)

安装CudaText编辑器。通过菜单Plugins / AddonManager / Install在其中安装插件排序

  • 在第一个标签中打开file1
  • 在第二个标签页中打开file2
  • 新建标签页(第3个),并将前2个标签页粘贴到其中(在第一个标签页中:全选,复制,然后在第三个标签页中:粘贴)
  • 在第3个(已填充)标签中,选择“全选”
  • 呼叫排序插件:菜单项“插件/排序/删除重复的行和起源”
  • 第三个标签显示结果

答案 3 :(得分:0)

缺少PowerShell解决方案,请尝试以下操作:

## Q:\Test\2018\06\26\SO51033576.ps1
$text1 = Get-Content `.\text1.txt
$text2 = Get-Content `.\text2.txt
(Compare-Object $text2 $text1 | Where-Object sideindicator -eq '<=').Inputobject|
    Set-Content '.\new-text2.txt'