Hier gibt es einige gute Antworten, aber ich sehe nur eine, die den Val
Teil des Problems enthält, und es ist nicht eindeutig, ob dies richtig ist. Ich bin damit einverstanden, dass dies awk
„ein erstaunliches Werkzeug“ ist, aber hier ist es nicht notwendig. Ich glaube, dass dieser sed
Befehl:
sed -n '/\[part1\]/,/\[part2\]/s/.*Val.*=//p' "$file"
wahrscheinlich macht was gewünscht. Wie die anderen sed -e '/\[part1\]/,/\[part2\]/p'
Lösungen ( Networker
und Babyy ) ist dies trivial anpassbar, um einen beliebigen Abschnitt auszuwählen. (Sie müssen natürlich den Namen kennen. Wenn Sie nur die Ordnungszahl kennen, können Sie die Antwort von terdon
oder die Antwort von glenn jackman anpassen. Beide zählen Abschnitte, anstatt nach einem bestimmten Namen zu suchen.) Wenn Sie dies nicht tun Kennen Sie den Namen des folgenden Abschnitts, können Sie tun
sed -n '/ \ [part42 \] /, / \ [part / s…' "$ file"
zum Beispiel.
Meine einzige Meta-Frage betrifft den cut -d'=' -f2
Teil der Frage. Wenn eine Eingabezeile, aus der wir Daten extrahieren, mehrere =
Zeichen nach enthält Val
(dh der Feldwert enthält =
Zeichen), z.
Einstein.Val = E=mc^2
dann cut
extrahiert der obige Befehl nur den Text zwischen dem ersten und dem zweiten =
(dh dem Feldwert bis zum ersten (aber nicht einschließlich) dem ersten =
), z E
. Der sed
Befehl, den ich oben dargestellt habe, extrahiert nur den Text nach dem letzten =
(z mc^2
. B. ). Verwenden Sie, um alles nach dem ersten =
(z. B. E=mc^2
) zu erhalten
sed -n '/\[part1\]/,/\[part2\]/s/.*Val[^=]*=//p' "$file"
Verwenden Sie, um das Verhalten von cut
(z. B. E
) nachzuahmen
sed -n '/\[part1\]/,/\[part2\]/s/.*Val[^=]*=\([^=]*\).*/\1/p' "$file"
Beachten Sie, dass mein Ansatz davon ausgeht, dass die Daten zumindest allgemein der Abbildung in der Frage entsprechen. dh mindestens eine =
erscheint irgendwo rechts von der Val
Zeichenfolge. Dementsprechend werden alle meine Lösungen Eingaben wie ignorieren
Girl.Name = Valerie
Valerie Bertinelli
auch wenn es zwischen [part1]
und fällt [part2]
.
cat file | grep foo
sinnlos ist. Es ist bekannt als "nutzlose Verwendung von Katze" . Sie könnengrep foo file
stattdessen immer tun .