在文本文件中查找单词组并将该行提取到新文本文件

时间:2015-03-20 13:52:11

标签: powershell batch-file

txt包含单词" hi" "你好" "阿罗哈"如下所示

hi

hello
aloha

我还有一个文件abc.txt包含很多单词,包括上面的3个单词。现在,我开发了一个PowerShell脚本来搜索abc.txt中的单词,并将包含单词的行提取到新文件done.txt。我用 -match命令查找单词。

如何使用包含查找单词的文件ref.txt,而不是在编码中声明单词?

我想在cmd.exe而不是PowerShell中开发它。

$source = "C:\temp\abc.txt"
$destination = "C:\temp\done.txt"

$hits = select-string -Path $source -SimpleMatch "hi","hello","aloha"
$filecontents = get-content $source

foreach($hit in $hits)
{
    $filecontents[$hit.linenumber-1]| out-file -append $destination
    "" |out-file -append $destination
}

2 个答案:

答案 0 :(得分:1)

这应该做批处理技巧:

findstr /G:ref.txt abc.txt >> done.txt

这会在ref.txtabc.txt

中打印done.txt中包含叮咬的所有行

我是否正确理解了您的问题?

答案 1 :(得分:0)

要涵盖此问题的PowerShell方面......

要从文件中获取所需的模式非常简单,因为Select-String支持-Pattern参数的字符串数组。在最简单的形式,你可以做这样的事情

$patterns = Get-Content c:\temp\ref.txt | Where-Object{$_}
$hits = Select-String c:\temp\test.txt -Pattern $patterns -SimpleMatch

您的文件中包含空白,我不确定是否有意。我使用Where-Object{$_}来过滤以防万一。然后将该字符串数组$patterns传递给参数-Pattern

之后的其余代码可能会稍微调整一下。 no 需要再次读取源文件才能再次输出匹配项。您的输出只是跟随换行符的匹配行。

$patterns = Get-Content c:\temp\ref.txt | Where-Object{$_}
$results = Select-String c:\temp\test.txt -Pattern $patterns -SimpleMatch
$results.Line | ForEach-Object{"$_`r`n"} | Set-Content C:\temp\out.txt

可能不是获得所需输出的最佳方式,但无论如何都应该有效。