Ich versuche, ein einfaches grep wie dies in einem Bash-SkriptFlucht in einem Bash-Skript, um einen Raum in einem Befehl grep
, zu tungrep "2017/01/01 00:" log.txt | wc -l
Das funktioniert gut.
In meinem Bash-Skript, das, ich versuche
i=16
DATE="$(date -d $2' '$i:00:00 '+%Y/%m/%d %H')"
echo $DATE
COUNT="$(grep $DATE $1 | wc -l)"
echo $COUNT
zu tun und ich es so nennen,
test.sh log.txt 2017/01/01
, dass wegen des Raumes nicht mit einem
: No such file or directory
Also habe ich versucht, doppelte Anführungszeichen, einfache Anführungszeichen und viele andere Dinge, aber sie alle fehlschlagen ...
COUNT="$(grep \"$DATE\" $1 | wc -l)"
Ich habe auch versucht printf verwenden, und obwohl dies sieht vielversprechend aus,
printf -v COMMAND "grep \"$DATE"
echo $COMMAND
# outputs: grep "2016/05/25 16
dieses verwirrt mit dem Anfang der Zeichenfolge up!
printf -v COMMAND "grep \"$DATE\""
echo $COMMAND
# outputs: "rep "2016/05/25 16
Was ist mit dem "g" passiert ?? Wie kann ich diesem Raum entkommen? Ich habe auch versucht, es durch \ s zu ersetzen, was in der Befehlszeile funktioniert, aber falsche Ergebnisse aus dem Bash-Skript ergibt.
Wirklich verwirrt.
Danke! Ich habe Cygwin benutzt, ja! Ich ändere die Zeilenenden der Datei nur auf LF und jetzt bekomme ich einige Ergebnisse mit deinem Code zurück. Allerdings bekomme ich andere Zahlen (weniger Einträge) im Vergleich, wenn ich das Grep direkt von der Kommandozeile aus ausführen ... Es scheint, dass es ein anderes Muster entspricht :( – endavid
Nevermind. Statt COUNT = "$ (grep ...)" direkt habe ich eine Funktion aufgerufen, die das Gleiche gemacht hat und $ COUNT zurückgegeben hat und sie mit countOccurrences $ 1 "$ DATE" aufgerufen hat (die Anführungszeichen, also wurde das Leerzeichen übergeben.) Das gibt mir weniger Vorkommnisse als den Grep direkt anzurufen ... I habe den Funktionsaufruf entfernt und ich mache es jetzt direkt. – endavid