entfernen Sie alle Zeilen aus der Datei beginnend mit "{" bis "}" mit sed
Frage
Ich habe eine Datei, deren Inhalt so ist :
control_data {
some data dadadadf
some data fsfsfs
some more data
.
.
.
}
more data below
{
.
.
}
Ich möchte die Daten von "control_data" bis zum ersten "}" löschen
Ich habe einen Befehl ausprobiert
sed "s/control_data\([^}]*\)}//g"
dies funktioniert aber nur, wenn wir nicht mehrere Zeilen haben, zB.dieser Befehl funktioniert, wenn wir Daten wie haben:
control_data {some data dadadadf some data fsfsfs some more data...}more data
Es gibt :
more data {....}
Wie funktioniert dieser Befehl, wenn Daten über mehrere Zeilen verteilt sind?Ich bin neu im Shell-Scripting, eine Erklärung mit Antwort wird einen großen Beitrag dazu leisten.
Danke im Voraus.
Lösung
Dieser kann nicht ein ideal sein, aber dieser verwendete sed (deinen SED-Code) generasacodicetagpre.
logisch: Ich konvertiere alle neuen Zeilen in: und dann mit deinem SED-Code und dann alle: Alles in Newlines konvertieren HINWEIS: Meine Annahme ist: wird nicht in der Datei anwesend sein.
Andere Tipps
mein sed-fu ist schwach, aber hier habe ich gearbeitet (mit Diese Antwort als Führer): generasacodicetagpre.
Hier ist ein Zusammenbruch des Befehls generasacodicetagpre.
Das könnte für Sie funktionieren:
sed '/^control_data {.*}$/d;/^control_data {/,/^}$/d' file
- Der erste Befehl entfernt alle einzelnen Zeilen
/^control_data {.*}$/d
- Der zweite Befehl entfernt alle Blöcke
/^control_data {/,/^}$/d