Generieren eines Berichts aus der Bash-Ausgabe

Generieren eines Berichts aus der Bash-Ausgabe

Ich versuche gerade, ein Skript in Bash zu schreiben, das eine Reihe von Unit-/Integrationstests ausführen kann. Dieser Teil funktioniert, aber was ich jetzt brauche, ist die Möglichkeit, am Ende eine Zusammenfassung auszugeben. Ich habe versucht, grepot zu verwenden, um jede Zeile zu erfassen, die eine Zahl gefolgt von der Zeichenfolge enthält failing, sie in einer Variablen zu speichern und am Ende auszudrucken.

Ein Beispiel für eine fehlgeschlagene Ausgabe ist

224 passing (3m)
47 failing

Ich möchte am Ende etwas in der Art gedruckt haben wie

service01 4 failing
service03 1 failing

Was ich bisher habe, ist:

OUTPUT=""
for service in ${array[*]}
do
  echo $service
  if [ $DO_API == 'true' ]
  then
    echo 'running API tests'
    OUTPUT+="$service API $(docker exec -it $service npm run api_test | tee /dev/tty | grep -e '[0-9]+ failing' )"
  fi

  if [ $DO_CI == 'true' ]
  then
    echo 'running CI tests'
    OUTPUT+="$service CI $(docker exec -it $service npm run ci | tee /dev/tty | grep -e '[0-9]+ failing' )"
  fi
  echo $'\n'
done

Das obige Skript zeigt bei fehlgeschlagenen Tests keine Ausgabe, was mich annehmen lässt, dass der Fehler an meiner Grep-Syntax liegt.

Was mache ich falsch?

Antwort1

Der folgende grepBefehl gibt die erforderliche Ausgabe zurück:

grep -E '[0-9]+ failing'

Das Muster [0-9]+entspricht einer oder mehreren Ziffern. Die -EOption muss verwendet werden, damit grepdas Muster als erweiterter regulärer Ausdruck interpretiert werden kann. Der +Quantifizierer ist nicht als Teil der grundlegenden regulären Ausdrücke definiert.

Beispiellauf (mit einer Datei):

$ cat testfile
224 passing (3m)
47 failing

$ grep -E '[0-9]+ failing' testfile
47 failing

Abgesehen davon kann dieses Muster auch mithilfe grundlegender regulärer Ausdrücke (BRE) auf folgende Weise implementiert werden:

$ grep '[0-9]\{1,\} failing' testfile
47 failing

In diesem Fall {n,m}wird der Quantifizierer verwendet, um eine oder mehrere Ziffern abzugleichen. Die Backslashes sind erforderlich, um den geschweiften Klammern ihre besondere Bedeutung zu geben.

verwandte Informationen