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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top