/ / sed grupo aninhado e referências anteriores - bash, shell, sed

sed nested group e backreferences - bash, shell, sed

Agora eu tenho um arquivo simples que eu quero:

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

O que espero é remover a linha ## tag ## do par e deixar as coisas do meio em paz. Eu posso fazer isso (exceto que há uma linha vazia na parte inferior):

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

Mas o slogan nem sempre é tão elegante quanto eu quero, há outro arquivo:

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

Eu sei que você entendeu meu ponto de vista, ainda quero remover o slogan:

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

Mas não consegui imprimir nada! Por quê??

Estou realmente ansioso por isso q, obrigado pelo seu tempo e perdoe meu pobre inglês :)

insira a descrição da imagem aqui

assim é . fósforos n? Como está o img acima?

Respostas:

1 para resposta № 1

Tente usar [^n]* ao invés de .*:

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

Além disso, você precisa levar em consideração caracteres adicionais antes / depois da "###tag##" marcador.


0 para resposta № 2

Isso pode funcionar para você (GNU sed):

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

Para manter os detalhes também nas linhas de tag, use:

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