我的文件参考文献包含单词“hi”,“hello”,“aloha”,如下所示:
hi
hello
aloha
我还有一个文件ABC文件其中包含很多单词,包括上述三个单词。
现在我开发了一个 powershell 批处理来搜索ABC文件并将包含单词的行提取到新文件中完成.txt。 我用-匹配命令来查找该单词。
如何使用该文件参考文献其中包含查找的单词,而不是在编码中声明单词?如果在命令执行程序或者电源外壳编码。请赐教。
$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
}
答案1
据我了解,您希望使用 ref.txt 中的单词作为搜索条件,这样如果您有一个包含这些单词的文件 abc.txt,则包含这些单词的行将返回到文件 done.txt 中。这可以在 cmd.exe 中以几种方式之一轻松实现。
findstr /g:ref.txt abc.txt > done.txt
上述解决方案将返回包含任何单词的任何行(即使它们在句子中或另一个单词的一部分,例如 hi 和 high),但不区分大小写。
/R - Use regex
/I - Case insensitive search
/B - Match at the beginning of the line only
/E - Match at the end of the line only
因此,如果你只想匹配文件中的单词而不是匹配句子中的单词,你可以这样做
findstr /BE /g:ref.txt abc.txt > done.txt
答案2
您可以使用 powershell 命令get-content
它将为您提供一个字符串,您可以将其拆分\n
以分别获取每一行。
PS C:\> get-content c:\ref.txt
hi
hello
aloha
将其拆分并保存在数组中。然后使用以下命令对每个项目执行您选择的操作
foreach ($element in $array)
{
/your code here/
}
您可以找到更多信息这里。
如果要使用这三个词一起进行搜索匹配,只需将 替换为\n
,,
然后将其放在命令后面-SimpleMatch
答案3
老问题,但它冒出来了......
该文件ref.txt
可用于构造-Pattern
选择字符串.Line
所得的财产赛事信息然后可以通过管道将对象传输到设置内容。
$WordList = '.\ref.txt'
$Source = '.\abc.txt'
$Destination = '.\done.txt'
$Pattern = '(^|\W)' + (( Get-Content $WordList) -join '(\W|$)|(^|\W)' ) + '(\W|$)'
Select-String $Pattern $Source |
Select -Expand Line |
Set-Content $Destination
内容为abc.txt
:
bob
hi mom
Carol
well hello world
Ted
In Hawaii, we say aloha
Alice
"Hill" should not be matched
我们得到:
PS C:\...\Custom Word Search>$WordList = '.\ref.txt'
>> $Source = '.\abc.txt'
>> $Destination = '.\done.txt'
>>
>> $Pattern = '(^|\W)' + ( (Get-Content $WordList) -join '(\W|$)|(^|\W)' ) + '(\W|$)'
>>
>> Select-String $Pattern $Source |
>> Select -Expand Line |
>> Set-Content $Destination
>>
PS C:\...\Custom Word Search>Get-Content .\done.txt
hi mom
hello world
In Hawaii, we say aloha
PS C:\...\Custom Word Search>