Não executa este sed quando uma string é correspondida?

1

Eu tenho este comando sed para excluir números dentro de tags:

sed 's/\(<[^0-9>]*\)[0-9]*\([^0-9]*>\)//g'

Mas alguém sabe como posso excluir certas sequências disso?

Agora seria algo assim, entrada:

<user1></user1>
<password2></password2>

E saída:

<user></user>
<password></password>

No entanto, quero excluir certas strings, como password2, por exemplo, e a saída seria assim:

<user></user>
<password2></password2>
    
por DisplayName 21.12.2015 / 00:28

1 resposta

2

Você pode pré-processar seu arquivo para inserir um caractere especial para as strings que deseja colocar na lista de permissões para impedir sua substituição.

Como você mudaria:

<user1></user1>
<password2></password2>

Para

<user1></user1>
<|password2><|/password2>

primeiro e use s/\(<[^|0-9>]*\)[0-9]*\([^0-9]*>\)//g para a substituição. Se | já pode ocorrer na entrada, você pode escapar usando um esquema como: _ - > _u , | - > _p que você poderia desfazer depois.

sed '
  s/_/_u/g;s/|/_p/g
  s:<\(/\{0,1\}password2>\):<|:g
  s:<\(/\{0,1\}othertag>\):<|:g
  s/\(<[^|0-9>]*\)[0-9]*\([^0-9]*>\)//g
  s/|//g;s/_p/|/g;s/_u/_/g'
    
por 21.12.2015 / 00:42