Localize o grupo de palavras em um arquivo de texto e extraia a linha para o novo arquivo de texto

0

meu arquivo ref.txt contém a palavra "hi" "hello" "aloha" conforme abaixo:

hi
hello
aloha

E eu tenho mais um arquivo abc.txt , que contém muitas palavras, incluindo as 3 palavras acima.

Agora eu desenvolvi um lote powershell para pesquisar os mundos em abc.txt e extrair a linha contendo as palavras para um novo arquivo done.txt . Eu uso o comando -match para encontrar a palavra.

Como usar o arquivo ref.txt que contém as palavras para a descoberta, em vez de declarar as palavras na codificação? Tudo bem se estiver em codificação cmd.exe ou powershell . Por favor, me ilumine.

$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    
 }
    
por Poobalan 20.03.2015 / 14:56

2 respostas

0

Pelo que entendi na sua pergunta, você quer usar as palavras em ref.txt como critério de pesquisa, de modo que, se você tiver um arquivo abc.txt que contenha essas palavras, as linhas contendo as palavras serão retornadas em um arquivo done.txt. Isso pode ser feito simplesmente em cmd.exe de uma das poucas maneiras.

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

A solução acima retornaria qualquer linha que contivesse qualquer uma das palavras (mesmo se elas estivessem em uma frase ou parte de outra palavra, como hi e high), mas não seriam insensíveis a maiúsculas e minúsculas.

/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

Então, se você quisesse apenas combinar palavras no arquivo e não corresponder a uma palavra na frase, você poderia fazer findstr /BE /g:ref.txt abc.txt > done.txt

    
por 20.03.2015 / 15:21
0

Você pode usar o comando powershell get-content

Você receberá uma string que pode ser dividida em \n para obter cada linha separadamente.

PS C:\> get-content c:\ref.txt
hi
hello
aloha

Divida e salve em uma matriz. Em seguida, execute a ação de sua escolha para cada item usando

foreach ($element in $array) 
{ 
     /your code here/ 
}

Você pode encontrar mais informações aqui .

Se você quiser usar todas as três palavras juntas para a correspondência de pesquisa, basta substituir o \n por , e colocar no seu comando depois de -SimpleMatch

    
por 20.03.2015 / 15:24