Ich schreibe ein Bash-Skript, das testen soll, ob jede Zeile in der Eingabe bestimmte Bedingungen erfüllt.
Gibt es eine Möglichkeit, das Prädikat zu nehmen und die gesamte Zeile auf 0 oder 1 zu reduzieren, sodass ich den Schleifencode nicht selbst mit einem Dienstprogramm codieren muss, das in Linux-Distributionen standardmäßig enthalten oder leicht verfügbar ist?
Antwort1
Beispieldaten (wir möchten alle Zeilen, die "wollen"):
$ cat x
not this
want this
not that
want that
Sie könnten verwendenawk
:
- Drucken Sie „a“
1
, wenn die Zeile mit dem regulären Ausdruck übereinstimmt/want/
- Drucken Sie a
0
, wenn die Zeile nicht übereinstimmt
$ cat x | awk '{if(match($0,/want/)){print 1}else{print 0}}'
0
1
0
1
Oder Versuchesed
:
- Ersetzen Sie Zeilen die nur enthalten
1
durch0
(sonst werden sie als durchgelassen1
) - Ersetzen Sie Zeilen, die "wollen" mit einem
1
- Ersetzen Sie Zeilen die nicht
1
mit einem sind durch ein0
$ cat x | sed -re 's/^1$/0/' -e 's/^.*want.*$/1/' -e 's/^[^1][^$].*$/0/'
0
1
0
1