Mit sed alle Zeilen zwischen 2 Strings

FatManStanding

Lt. Junior Grade
Registriert
Aug. 2021
Beiträge
377
tach,

angenommen ich habe folgende datei:

Code:
blabla aaa blabla
bbb
ccc
ddd
blabla aaa blabla
bbb
ccc
ddd
blabla aaa blabla
bbb
ccc
ddd

dann kann ich mir alles zwischen der zeile die 'aaa' enthält und der nächsten zeile die mit 'ddd' beginnt anzeigen lassen:

Code:
sed -n '/aaa/,/^ddd/{p;/^ddd/q}' input

das ganze soll so lange gemacht werden, bis alle "treffer" abgearbeitet sind. im beispiel haben also 3 mal, wiel es 3 mal einen treffen für "zeile die aaa enthält" und "nächste zeile die mit ddd beginnt" gibt. aktuell fällt mir nur ein den 1. treffer zu löschen und die datei erneut durch sed zu schicken.
 
kA, ob ich die Anfrage richtig verstanden habe: Ersetze das q durch ein g.
 
  • Gefällt mir
Reaktionen: kieleich und 0x7c9aa894
das geht, aber nur direkt im terminal. wenn ich das ganze in ein shell-script schreibe wird wieder nur das erste auftreten angezeigt statt dreimal.
 
Da muss aber etwas anderes im Argen liegen. Ich hab das auch mal kurz nachgestellt:
Code:
$ cat foo.sh
#!/bin/sh
sed -n '/aaa/,/^ddd/{p;/^ddd/g}' "$@"
$ ./foo.sh input
blabla aaa blabla
bbb
ccc
ddd
blabla aaa blabla
bbb
ccc
ddd
blabla aaa blabla
bbb
ccc
ddd
 
  • Gefällt mir
Reaktionen: kieleich
es sollte im Shell Script genauso funktionieren, wie in der Shell direkt
 
Wenn ich jetzt richtig verstanden habe, soll alles mit 'aaa' bis 'ccc' ausgegeben werden. Also Lösung für ein Skript komme ich da auf folgendes:
Bash:
#!/bin/bash

teil=$(sed -n '/aaa/,/^ccc/p' < datei)
echo "$teil"

In 'Datei' dann die Zeilen. Ausgabe wäre

blabla aaa blabla
bbb
ccc
blabla aaa blabla
bbb
ccc
blabla aaa blabla
bbb
ccc
 
Zurück
Oben