Suchen Sie eine Wortgruppe in einer Textdatei und extrahieren Sie die Zeile in eine neue Textdatei


0

meine Datei ref.txt enthält das Wort "hi" "hello" "aloha" wie folgt:

hi
hello
aloha

Und ich habe noch eine Datei abc.txt welches viele Wörter enthält, einschließlich der obigen 3 Wörter.

Jetzt habe ich einen Powershell-Stapel entwickelt, in dem ich die Welten durchsuchen kann abc.txt und extrahieren Sie die Zeile mit den Wörtern in eine neue Datei done.txt . ich benutze -Spiel Befehl, um das Wort zu finden.

Wie benutzt man die Datei? ref.txt Welche enthält die Wörter für den Befund, anstatt die Wörter in Codierung zu deklarieren? Es ist in Ordnung, wenn es in cmd.exe oder Power Shell Kodierung. Erleuchte mich bitte.

$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    
 }

Ich verstehe nicht, wie ein SimpleMatch Ihnen hilft. Ich glaube nicht, dass du willst, dass "hi" mit "hill" übereinstimmt. Ich vermute, Sie wollen nur ganze Wörter zusammenbringen.
dbenham

Antworten:


0

Nach dem, was ich in Ihrer Frage verstehe, möchten Sie die Wörter in ref.txt als Suchkriterium verwenden. Wenn Sie also eine Datei abc.txt haben, die diese Wörter enthält, werden die Zeilen, die die Wörter enthalten, in einer Datei done zurückgegeben. TXT. Dies kann einfach in cmd.exe auf eine von mehreren Arten erreicht werden.

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

Die obige Lösung würde jede Zeile zurückgeben, die eines der Wörter enthält (auch wenn sie sich in einem Satz oder einem Teil eines anderen Wortes wie hi und high befinden), aber die Groß- / Kleinschreibung nicht berücksichtigen.

/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

Wenn Sie also nur Wörter in der Datei und kein Wort im Satz suchen möchten, können Sie dies tun findstr /BE /g:ref.txt abc.txt > done.txt


0

Sie können den Powershell-Befehl verwenden get-content

Sie erhalten eine Zeichenfolge, die Sie aufteilen können \n jede Zeile separat zu bekommen.

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

Teilen Sie es und speichern Sie es in einem Array. Führen Sie dann für jeden Gegenstand eine Aktion Ihrer Wahl mit aus

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

Hier finden Sie weitere Informationen Hier .

Wenn Sie alle drei Wörter gleichzeitig für die Suche verwenden möchten, ersetzen Sie einfach die \n mit , und platziere in deinem Befehl danach -SimpleMatch

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.