Użyj cmdletów PowerShella, aby nauczyć się podstaw: jak pobierać tekst z plików tekstowych i jak znajdować tekst w plikach tekstowych.
Jednym z najbardziej powszechnych zadań, jakie musi wykonać informatyk, jest tworzenie, odczytywanie lub zmienianie plików tekstowych w jakiś sposób. Pliki tekstowe są reprezentowane w tysiącach różnych formatów od prostych plików TXT do XML do różnych formatów zastrzeżonych. Ponieważ pliki tekstowe mogą być zorganizowane w tak ogromną liczbę sposobów, producenci przyjęli prosty plik tekstowy jako środek do definiowania skryptów, przechowywania wartości konfiguracyjnych i zapytań SQL i wiele innych. Jedyną różnicą strukturalną w pliku TXT i pliku SQL, na przykład, jest tylko rozszerzenie pliku. Zawartość jest po prostu tekstem ustrukturyzowanym w inny, predefiniowany sposób.
PowerShell ma wiele różnych sposobów na zarządzanie wszystkimi tymi typami plików tekstowych, ale w tym artykule będziemy trzymać się najbardziej ogólnego podejścia: Skupimy się na czytaniu i niestrukturalnym tekście. Oznacza to brak plików XML, plików zapytań SQL, a nawet samych skryptów PowerShell. Skupimy się na dwóch tematach:
- Jak pobrać tekst z plików tekstowych.
- Jak znaleźć tekst w plikach tekstowych.
Jak pobrać tekst z plików tekstowych
Jednym z najprostszych zadań jest pobranie całego tekstu z istniejącego pliku tekstowego. Dla większości plików tekstowych skrypter PowerShell może użyć cmdleta Get-Content. Jest to bardzo popularny cmdlet PowerShell, który pobiera cały tekst z pliku tekstowego określonego przez parametr Path.
W najprostszy sposób można przekazać parametr Path ze ścieżką do pliku tekstowego jako argument do cmdleta Get-Content. Załóżmy, że mam plik o nazwie MyText.txt. W tym pliku tekstowym mam trzy linie pokazane poniżej i chciałbym uzyskać zawartość MyText.txt za pomocą skryptu PowerShell.
Aby to zrobić, mogę użyć Get-Content z parametrem Path.
Zobaczysz, że wynikiem była cała zawartość MyText.txt. Ale co jeśli chciałbyś zobaczyć tylko konkretny numer linii? Domyślnie, Get-Content czyta każdą linię w pliku tekstowym i tworzy tablicę jako wyjście z każdą linią tekstu jako elementem w tej tablicy. Oznacza to, że mogę łatwo wybrać różne elementy w tej tablicy poprzez podanie numeru indeksu tablicy. W tym przypadku, numer indeksu tablicy jest równy numerowi linii pliku tekstowego.
W powyższym przykładzie, pokazuję, że wynik Get-Content jest typem System.Array i że używając numerów indeksów w nawiasach mogę wybrać, które linie chcę wypisać na moją konsolę. Jedną rzeczą, którą należy zauważyć jest to, że jeśli nie jesteś zaznajomiony z tablicami i ich schematem numeracji, pierwszy element w tablicy zaczyna się od zera. To dlatego jestem w stanie użyć numeru jeden do wybrania drugiej linii i numeru dwa do wybrania trzeciej linii. Jest to ważne do zapamiętania.
Jak znaleźć tekst w plikach tekstowych
Gdy już jesteś w stanie dowiedzieć się jak znaleźć cały tekst w plikach tekstowych lub określone numery linii, kolejnym popularnym zadaniem jest znalezienie konkretnego tekstu wewnątrz samych plików. Istnieje kilka różnych sposobów, aby to zrobić, ale najłatwiejszym jest użycie polecenia Where-Object cmdlet. Polecenie Where-Object jest popularnym poleceniem, które pozwala na „odfiltrowanie” różnych informacji z danych wyjściowych innych poleceń; w tym przykładzie jest to filtrowanie informacji z polecenia Get-Content.
Na przykładzie naszego poprzedniego pliku tekstowego, powiedzmy, że chcę sprawdzić, czy plik tekstowy zawiera słowa „plik tekstowy” razem w nim. Aby to zrobić, użyję Where-Object.
Przy użyciu Where-Object muszę użyć zmiennej $_. Jest to specjalna zmienna w PowerShell znana jako zmienna rurociągu. W tym przykładzie reprezentuje ona każdą linię pliku tekstowego, tak jak pochodzi ona z Get-Content. Następnie używam operatora like i używam symboli wieloznacznych, aby sprawdzić, czy ciąg „plik tekstowy” istnieje w którejkolwiek z linii pliku tekstowego. Wygląda na to, że znaleziono dwie linie pasujące do tego łańcucha.
Jeśli chcesz dowiedzieć się więcej o znajdowaniu tekstu w plikach tekstowych, proponuję zapoznać się z operatorami porównania PowerShell. Użycie operatora match, na przykład, używa regex, który jest znacznie bardziej wydajny niż operator like i pozwala na znalezienie w pliku tekstowym prawie każdego wzoru, jaki tylko przyjdzie nam do głowy.