Domanda

Ho un file i cui contenuto sono così:

control_data {
some data dadadadf 
some data fsfsfs
some more data
.
.
.
}
more data below 
{
.
.
}
.

Voglio eliminare i dati da "Control_Data" al primo "}"

Ho provato un comando

sed "s/control_data\([^}]*\)}//g"
.

Ma questo funziona solo se non abbiamo più righe, ad esempio.Questo comando funziona quando abbiamo dati come:

control_data {some data dadadadf some data fsfsfs some more data...}more data
.

Dà:

more data {....} 
.

Come far funzionare questo comando quando abbiamo dati su più linee? Sono nuovo a Shell Scripting Alcune spiegazioni con la risposta andranno molto lontano nell'aiutare.

Grazie in anticipo.

È stato utile?

Soluzione

Questo potrebbe non essere ideale ma questo usato sed (il tuo codice sed)

cat ip_file.txt | tr '\n' ':' | sed "s/control_data\([^}]*\)}//g" | tr ':' '\n'
.

Logica: sto convertendo tutte le nuove linee per: e quindi usando il tuo codice SED e quindi convertire tutto: su Newline Nota: la mia ipotesi è: non sarà presente nel file ovunque.

Altri suggerimenti

My SED-FU è debole, ma ecco cosa ho lavorato (usando Questa risposta come guida):

[me@home]$ sed -n '/^control_data {/{:a;n;/^}/!ba;n};p' input_file.txt
more data below 
{
.
.
}
.

Ecco una rottura del comando

sed -n "             # "-n" = suppress automatic printing of pattern space
/^control_data {/ {  # if (line matches control data)
   :a;                 #   mark this spot with label a
   n;                  #   get next line
   /^}/!ba             #   if (doesn't start with "}") go back to label a
   n;                  #   get next line before leaving this control block
};                   # end if
p;                   # print everything else not affected by previous block
" input_file.txt
.

Questo potrebbe funzionare per te:

sed '/^control_data {.*}$/d;/^control_data {/,/^}$/d' file
.

    .
  • Il primo comando rimuove tutte le linee singole /^control_data {.*}$/d
  • Il secondo comando rimuove tutti i blocchi /^control_data {/,/^}$/d
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top