Gnuwin32 grep: Ausgabe über cmd.exe oder Powershell weiterleiten

0

Ich versuche, mit dem Befehl Gnuwin32 grep eine Liste von Dateien zu erstellen, die ich einem anderen Befehl hinzufügen möchte (eigentlich einem Perl-Skript). Ich habe eine Reihe von HTML-Dateien und möchte alle auflisten, die mit dem regulären Ausdruck übereinstimmen itemprop=['"]description.

Jetzt, nach einigem Herumspielen, habe ich festgestellt, dass die cmd.exe aufgerufen wird

grep -i -E -l "itemprop=['\"]description" path/to/files/*.htm

Funktioniert einwandfrei, aber ich kann die Ausgabe nicht an Perl leiten (oder an einen anderen Befehl):

grep -i -E -l "itemprop=['\"]description" path/to/files/*.htm | perl myscript.pl

druckt eine Liste der Dateien auf das Terminal, gefolgt von

grep: |: No such file or directory grep: perl: No such file or directory myscript.pl

grep behandelt | und nachfolgende Wörter als Argumente. Wie vermeide ich das?

Außerdem habe ich versucht, das Problem mit Powershell zu lösen. Ich kann von dort aus problemlos weiterleiten (wenn ich einen elementaren Ausdruck wie "itemprop" verwende), aber ich habe Probleme, den zu suchenden Ausdruck anzugeben.

grep -i -E -l "itemprop=['\"]description" path/to/files/*.htm funktioniert einfach nicht Powershell zeigt mir ein >> -Zeichen. Ich weiß nicht einmal, was es bedeutet (ich erwarte mehr Eingaben). Ich habe jede Art von Flucht vor Anführungszeichen versucht, aber keine scheint zu funktionieren. Manchmal ist es die Shell, manchmal ist es grep, die sich über einen unvergleichlichen Charakter beschwert.

Jede Hilfe wird sehr geschätzt.

valerio
quelle

Antworten:

0

Anscheinend haben Sie eine Kollision darüber gefunden, wie die verschiedenen beteiligten Parser mit Anführungszeichen umgehen. Die einfachste Möglichkeit, diesen Fall zu lösen, besteht darin, das schließende Anführungszeichen des grepSuchausdrucks zu umgehen

grep -iEl "itemprop=['\"]description^" path/to/files/*.htm | perl myscript.pl
MC ND
quelle
Sehr schön, obwohl ich nicht verstehe, warum ich mich dem Schlusszitat entziehen soll, anstatt dem mittleren. In der Zwischenzeit habe ich eine andere Form gefunden, die funktioniert, nämlich grep -iEl "itemprop=['\\""]description" path/to/files/*.htm | perl myscript.pldie ein bisschen sinnvoll zu sein scheint, sobald Sie zu dieser verrückten Flucht in der Mitte kommen. Beachten Sie auch, dass keine der beiden Methoden in Powershell funktioniert.
Valerio