/ / gruppo nidificato e backreferences - bash, shell, sed

gruppo annidato e backreferences - bash, shell, sed

Ora ho un semplice file su cui voglio sedermi:

~ cat sample
##tag##
xxxxxxx
xxxxxxx
##tag##

Quello che mi aspetto è rimuovere la riga ## tag ## sulla coppia e lasciare da sola la parte centrale. Posso farlo (eccetto che c'è una riga vuota in fondo):

~ sed -r "N;N;N; s/##tag##n((.*n)*)##tag##/1/" sample
xxxxxxx
xxxxxxx

Ma la tag line non è sempre così pulita come voglio, c'è un altro file:

~ cat sample2
##tag###dklxjexx
xxxxxxx
xxxxxxx
asdf##tag###xosy

So che hai capito il mio punto, voglio ancora rimuovere il tag line:

~ sed -r "N;N;N; s/##tag.*n((.*n)*).*tag##/1/" sample2

Ma non ho stampato niente! Come mai??

Sono davvero impaziente di questo q, grazie per il tuo tempo e perdona il mio povero inglese :)

inserisci la descrizione dell'immagine qui

così è . fiammiferi n? Com'è arrivata l'img?

risposte:

1 per risposta № 1

Prova a usare [^n]* invece di .*:

sed -r "N;N;N; s/[^n]*##tag[^n]*n(.*)n[^n]*tag##.*/1/" sample2

Inoltre, è necessario tenere conto di caratteri aggiuntivi prima / dopo il "###tag##" pennarello.


0 per risposta № 2

Questo potrebbe funzionare per te (GNU sed):

sed "/##tag##/,//{//d}" file

Per mantenere anche i dettagli sulle linee di tag, usa:

sed "/##tag##/,//{s///}" file