{"id":576,"date":"2017-10-28T11:06:39","date_gmt":"2017-10-28T09:06:39","guid":{"rendered":"http:\/\/blog.langlitz-it.de\/?p=576"},"modified":"2018-01-25T12:00:15","modified_gmt":"2018-01-25T10:00:15","slug":"powershell-select-string-suchen-und-verarbeiten-von-dateiinhalten","status":"publish","type":"post","link":"https:\/\/www.langlitz-it.de\/?p=576","title":{"rendered":"Powershell &#8211; select-string &#8211; Suchen und Verarbeiten von Dateiinhalten"},"content":{"rendered":"<p>Sie k\u00f6nnen zum Suchen in Textdateien die beiden Windows eigenen Tools <em>find<\/em> bzw. <em>findstr <\/em>nutzen. Allerdings sind diese beiden Tools doch sehr eingeschr\u00e4nkt in ihren M\u00f6glichkeiten. F\u00fcr die rudiment\u00e4re Suche zwar ausreichend, mehr aber auch nicht. Das Powershell cmdlet <em>select-string <\/em>bringt f\u00fcr diesen Zweck wesentliche Vorteile mit sich. Der wesentlichste ist nat\u00fcrlich die M\u00f6glichkeit der Weiterverarbeitung und die \u00dcbergabe an andere cmdlets \u00fcber eine Pipe. Um in allen Dateien eines Verzeichnisses nach der Zeichenfolge <em>&#8220;Marco.langlitz&#8221;<\/em> zu suchen, reicht folgender Aufruf:<\/p>\n<p><em><strong><em><strong>select-string -path *.* -pattern &#8220;marco.langlitz&#8221;<\/strong><\/em><\/strong><\/em><\/p>\n<p>Zur\u00fcckgeliefert werden der Dateiname, die Zeilennummer und der Zeileninhalt. Die Ausgabe erfolgt an stdout. Die Suche ist im Gegensatz zu <em>find<\/em> und <em>findstr <\/em>nicht <em>case sensitive<\/em>. Wenn man das m\u00f6chte, muss man als Parameter <em>-CaseSensitive<\/em> mit angeben.<\/p>\n<p>Der Parameter &#8211;<em>pattern <\/em>wird als regul\u00e4rer Ausdruck &#8211;\u00a0<em><a title=\"Regul\u00e4rer Ausdruck\" href=\"http:\/\/de.wikipedia.org\/wiki\/Regul%C3%A4rer_Ausdruck\" target=\"_blank\" rel=\"noopener\">Regex (regular expressions)<\/a>\u00a0&#8211;<\/em> interpretiert.<\/p>\n<p>Eine einfache Suche nach einem String kann man statt dessen mit dem Parameter &#8211;<em>SimpleMatch <\/em>ausf\u00fchren.<\/p>\n<p><em><strong><em><strong>select-string -path *.* -SimpleMatch &#8220;marco.langlitz&#8221;<\/strong><\/em><\/strong><\/em><\/p>\n<p>Die Suche l\u00e4sst sich auch mit dem Parameter &#8211;<em>NotMatch <\/em>invers durchf\u00fchren. Zur\u00fcckgeliefert werden alle Zeilen von Dateien, die den angegebenen String <strong>nicht<\/strong> enthalten.<\/p>\n<p><em><strong>select-string -path *.* -NotMatch &#8220;marco.langlitz&#8221;<\/strong><\/em><\/p>\n<p>Sie k\u00f6nnen f\u00fcr die Suche auch Dateien ausschlie\u00dfen.<\/p>\n<p><em><strong><strong><em>select-string -path *.* -exclude *.txt -SimpleMatch &#8220;marco.langlitz&#8221;<\/em><\/strong><\/strong><\/em><\/p>\n<p>Die <strong>rekursive Suche<\/strong> in Unterverzeichnissen ist mit <em>select-string<\/em> leider <strong>nicht <\/strong>m\u00f6glich. Dazu k\u00f6nnen die Funktionen von <em>get-ChildItem<\/em> aber verwendet werden:<\/p>\n<p><em><strong><strong><em>get-ChildItem *.* -exclude *.txt -recurse |select-string -SimpleMatch &#8220;marco.langlitz&#8221;<\/em><\/strong><\/strong><\/em><\/p>\n<p>Die Ausgabe k\u00f6nnen Sie nat\u00fcrlich noch mit allen Powershell M\u00f6glichkeiten anpassen. Wenn Sie zum Beispiel nur den Dateinamen und die Zeilennummer erhalten m\u00f6chten, erreichen Sie diese \u00fcber <em>select<\/em>.<\/p>\n<p><em><strong><strong><em>get-ChildItem *.* -exclude *.txt -recurse |select-string -SimpleMatch &#8220;marco.langlitz&#8221; |select FileName, LineNumber<\/em><\/strong><\/strong><\/em><\/p>\n<p>Die zur\u00fcckgegebenen Objekte von <em>Select-string<\/em> lassen sich nat\u00fcrlich an verschiedenste cmdlets pipen, wodurch sich unz\u00e4hlige M\u00f6glichkeiten der Weiterverarbeitung ergeben. Zum Beispiel m\u00f6chten Sie nach mehrere Strings suchen.<\/p>\n<p><strong><em>get-ChildItem *.* -exclude *.txt -recurse |select-string -SimpleMatch &#8220;marco.langlitz&#8221;<\/em> |% \u00a0{select-string -path $_.path &#8220;IT Consulting&#8221;} |select filename,LineNumber<\/strong><\/p>\n<p>Wenn Sie nach Strings mit Sonderzeichen suchen, m\u00fcssen Sie noch beachten, dass <em>Select-String<\/em> nach <em><a title=\"Regul\u00e4rer Ausdruck\" href=\"http:\/\/de.wikipedia.org\/wiki\/Regul%C3%A4rer_Ausdruck\" target=\"_blank\" rel=\"noopener\">Regex (regular expressions)<\/a><\/em> sucht. Damit m\u00fcssen Sie diverse Sonderzeichen entsprechend behandeln. Das Hochkomma m\u00fcssen Sie z.B. verdoppeln, oder vor eine Klammer ein \\ stellen.<\/p>\n<p><span style=\"text-decoration: underline;\"><strong>Beispiel<\/strong><\/span><\/p>\n<p>falsch:<\/p>\n<p><strong><em>Select-String &#8220;Das ist insgesamt &#8220;50 \u20ac&#8221; wert&#8221;<\/em><\/strong><\/p>\n<p>richtig:<\/p>\n<p><strong><em>Select-String &#8220;Das ist insgesamt &#8220;&#8221;50 \u20ac&#8221;&#8221; wert&#8221;<\/em><\/strong><\/p>\n<p>falsch:<\/p>\n<p><strong><em>Select-String &#8220;Das ist insgesamt (50 \u20ac) wert&#8221;<\/em><\/strong><\/p>\n<p>richtig:<\/p>\n<p><strong><em>Select-String &#8220;Das ist insgesamt \\(50 \u20ac\\) wert&#8221;<\/em><\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>Viel Spass damit! \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sie k\u00f6nnen zum Suchen in Textdateien die beiden Windows eigenen Tools find bzw. findstr nutzen. Allerdings sind diese beiden Tools doch sehr eingeschr\u00e4nkt in ihren M\u00f6glichkeiten. F\u00fcr die rudiment\u00e4re Suche zwar ausreichend, mehr aber auch nicht. Das Powershell cmdlet select-string &hellip; <a href=\"https:\/\/www.langlitz-it.de\/?p=576\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[235,234,232,236,233,230,231,553,228,229],"_links":{"self":[{"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts\/576"}],"collection":[{"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=576"}],"version-history":[{"count":23,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts\/576\/revisions"}],"predecessor-version":[{"id":2206,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts\/576\/revisions\/2206"}],"wp:attachment":[{"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}