comando sed per sostituire il testo su più righe con vuoto


0

Ho un file XML che contiene parte come indicato di seguito.

<Target name=something>
     < other content here>
</Target>

Ora come posso rimuovere questo contenuto dal mio file usando il comando sed? Ho provato il seguito ma non ha funzionato.

sed -ir  's/\<Target Name\=.*.\<\/Target\>//g' filename

Per favore, consiglio.


A seconda della versione delle espressioni regolari utilizzate \<e \>può avere un significato speciale: [<]e [>]corrisponderà ai valori letterali in tutti i casi. Ma dovrai fare molto di più per abbinare i pattern su più righe: raccomando questo tutorial : leggere non è facile, ma spiegare sednon può mai essere.
AFH,

Risposte:


4
  1. dovresti usare gli strumenti XML per manipolare le strutture XML

  2. sed ha lo scopo di elaborare le cose riga per riga, probabilmente vorrai cercare Awk per risolvere questo tipo di sostituzione.

Per risolvere il tuo problema con awk:

awk '/<Target /,/<\/Target>/ { next } 1' your_file

modificare:

appena trovato: sed può fare la stessa cosa

sed '/<Target /,/<\/Target>/d' your_file

2

John ha effettivamente risposto alla maggior parte della tua domanda. Tuttavia, ho notato che intendi eseguire modifiche sul posto fornendo l' -iopzione a sed. Si noti che questa opzione accetta un argomento opzionale SUFFIX. Se viene fornito SUFFIX, viene eseguito un backup del file di input aggiungendo SUFFIX al suo nome. Il problema molto probabile nella riga di comando è che la lettera 'r' in -irviene interpretata come suffisso di backup, piuttosto che un'opzione separata -r. Per ottenere l'effetto desiderato (quando non si intende eseguire il backup dei file durante la modifica sul posto) non combinare altre opzioni con -i(o assicurarsi che iarrivi sempre per ultimo):

# All these do the same thing (in-place editing using extended regular expressions)
sed -r -i ...
sed -i -r ...
sed -ri ...

# This one backs up input files by appending the letter 'r' to their names
# (and DOES NOT use extended regular expressions)
sed -ir ...
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.