Drucken von Linien zwischen zwei regex mit sed
Ich habe eine Textdatei, die enthält mehrere Abschnitte, und ich will, drucken Sie einen dieser Abschnitte.
Teil der Datei sieht aus wie
3. line 3
4. line 4
## Screenshots ##
1. line 1
2. line 2
3. line 3
4. line 4
## Changelog ##
3. line 3
4. line 4
Aus dieser möchte ich abrufen, alle Zeilen, die zwischen ## Screenshots ##
und der Beginn des nächsten Abschnitts. Hier der nächste Abschnitt ist ## Changelog ##
, aber es könnte alles sein. So ist die einzige Sache, die wir uns verlassen können ist, dass es beginnt mit ##
.
Vom ein anderer thread, fand ich den folgenden code
sed -e "H;/${pattern}/h" -e '$g;$!d' $file
die ich geändert, um
sed -e "H;/## Screenshots ##/h" -e '$g;$!d' readme.md
Nun, es ruft alle Linien ab ## Screenshots ##
, aber es druckt alle Zeilen, bis das Ende der Datei.
Ich dann an anderen sed
wie
sed -e "H;/## Screenshots ##/h" -e '$g;$!d' readme.md | sed "/^##/q"
Aber jetzt druckt er nur
## Screenshots ##
Ist es trotzdem kann ich drucken, werden alle Linien in der screenshots-Sektion?
InformationsquelleAutor Sudar | 2013-05-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
nehmen Sie den "Screenshot" als Beispiel:
BEARBEITEN hinzufügen Erklärung
sed nur
EDIT2 hinzufügen Erklärung von sed cmd
siehe EDIT
Danke. Es funktioniert, aber ich wähle die andere Antwort da hatte ich schon die nachfolgenden Befehle in
sed
. Ich habe von Ihnen positiv bewertet werden die Antwort aber 🙂ok, Sie hat nicht erwähnt das Erfordernis der sed. oder (sed). jeder Weg, ich habe eine sed einzige Lösung, ohne die Rohrleitungen zu Kopf.
Schön
sed
Lösung. Können Sie weglassen der geschweiften Klammern rund um dieq
obwohl.InformationsquelleAutor Kent
sed -n '/## Screenshots ##/,/##/p' readme.md
Dieser startet das drucken von
## Screenshots ##
bis zum nächsten##
gefunden wird. Wenn Sie nicht möchten, dass die letzten##
match, am einfachsten istsed -n '/## Screenshots ##/,/##/p' readme.md |head -n-1
InformationsquelleAutor abasu
awk
Diese kann getan werden, leichter und mehr allgemein mit
awk
:Wenn Sie nur einen Abschnitt haben, dies zu tun:
Ausgabe:
Erklärung
sed
Ich fügte hinzu, Kommentare zu jedem Abschnitt des awk-Skript.
danke für die Kommentare. Und sorry für die Verwirrung. Ich wollte nur Zeilen in der screenshot-Sektion.
in diesem Fall setzen Sie den Abschnitt, den Zähler auf 1.
Danke. Es funktioniert, aber ich wähle die andere Antwort da hatte ich schon die nachfolgenden Befehle in
sed
. Ich habe von Ihnen positiv bewertet werden die Antwort aber 🙂InformationsquelleAutor Thor
Ich brauchte nur heraus zu filtern, Abschnitte einer Datei, wo Sie können wiederholen. Ich spreche Ausgabe von
dwarfdump
. Jeder Abschnitt beginnt mit einem Namen, wie.debug_macro
oder.debug_line
. Zum Beispiel,Hier ist das Skript (ausgeführt mit
-n
):Ausgabe:
InformationsquelleAutor x-yuri