Mam więc kilka dużych plików tekstowych, które muszę posortować i usunąć wszystkie wystąpienia wierszy zawierających dane słowo kluczowe. Zasadniczo, jeśli mam te linie:
To nie jest test
To jest test
Być może test
Zdecydowanie nie test
I uruchamiam skrypt z „nie”, muszę całkowicie usunąć wiersze 1 i 4.
Próbowałem z:
PS C:\Users\Admin> (Get-Content "D:\Logs\co2.txt") |
Foreach-Object {$_ -replace "3*Program*", ""} |
Set-Content "D:\Logs\co2.txt"
ale zastępuje tylko „Program”, a nie całą linię.
windows-7
powershell
script
Karel
źródło
źródło
Set-Content
? Nie wierzę, żeSet-Content
to zastępczy zamiennikOut-File
.Get-Content .\in.txt | Where-Object {$_ -notmatch 'not'} | Set-Content out.txt
Plik wyjściowy jest w zasadzie zestawem treści, ale uruchamia dane wejściowe za pomocą domyślnego formatowania zamiast prostej konwersji łańcucha.To zadziała:
źródło
Możesz także użyć „Select-String” z opcją -notmatch:
źródło
Musiałem tylko to uruchomić i wymyśliłem następujące rzeczy:
Kluczem jest to, że „Where-Object” wykorzystujący blok skryptu (oznaczony nawiasami klamrowymi) wymaga zadeklarowania zmiennej w zdarzeniu tworzenia bloku skryptu, stąd
linia.
Konstruując go w ten sposób, można utworzyć funkcję, przekazać ciąg tekstowy w celu częściowego dopasowania, wykonać tworzenie bloku skryptu z przekazaną wartością i pozwolić mu działać poprawnie.
Powyższe odpowiedzi nie wyjaśniają poprawnie, jak przekazać wartość, która ma zostać zastąpiona w zmiennej.
źródło