Ich habe also viele Jekyll-Posts _posts
mit YAML-Metadaten im Header, darunter categories
beispielsweise diesen:
---
excerpt: "I am an excerpt"
categories:
- tips
- programming
- howto
- another-tag
layout: blog
title: I am a Page Title
created: 1267026549
permalink: blog/27-05-2017/clean-url-goes-here
---
Ich weiß also, wie ich nach der categories
Zeile greppe und n
die Zeilen nach ( -An
) anzeigen kann... aber gibt es eine Möglichkeit, alle folgenden Zeilen anzuzeigen, die mit beginnen -
, da jeder Beitrag offensichtlich eine andere Nummer hat? Vielleicht alle Zeilen bis layout
?
Antwort1
Das empfohlene Tool zur Textverarbeitung ist awk
.
Versuche dies:
awk '/categories/,/layout/ { if (!/layout/) print }' your_file
Dieser Befehl druckt alles ab „ categories
bis“ layout
ohne diese Zeile selbst.
Ausgabe:
categories:
- tips
- programming
- howto
- another-tag
categories
Wenn Sie nur die Elemente zwischen und haben möchten, layout
können Sie der if
Bedingung einfach ein zweites Muster wie folgt hinzufügen:
awk '/categories/,/layout/ { if (!/layout/ && !/categories/) print }' your_file
Ihre Ausgabe sieht dann folgendermaßen aus:
- tips
- programming
- howto
- another-tag
Antwort2
pcregrep
Wenn Sie (Perl-kompatible reguläre Ausdrücke) verwenden können :
pcregrep -M 'categories.*(\n-.*)*' file
oder mithilfe der Lookahead-Assertion:
pcregrep -M 'categories(.|\n)*(?=layout)' file
Antwort3
sed -e '/^categories:/,/^[^-]/!d;//d' yourfile
Antwort4
So geht das mit awk: Wenn Sie die Kopfzeile gefunden haben, drucken Sie sie aus, und holen Sie sich die nächste Zeile und drucken Sie sie aus, solange die nächste Zeile mit einem beginnt -
.
awk '$0=="categories:" { do { print; getline } while (/^-/) }'