Не запускать этот sed при сопоставлении строки?

У меня есть команда sed для удаления чисел внутри тегов:

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

Но знает ли кто-нибудь, как я могу исключить некоторые строки из этого?

Теперь это будет примерно так: input:

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

И вывод:

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

Тем не менее, я хочу, чтобы иметь возможность исключать определенные строки, например, password2, тогда выход будет выглядеть следующим образом:

 <user></user> <password2></password2> 

Вы можете предварительно обработать ваш файл, чтобы вставить специальный символ для тех строк, которые вы хотите использовать в белом списке, чтобы они не заменялись.

Как вы изменили:

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

к

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

сначала и воспользуемся s/\(<[^|0-9>]*\)[0-9]*\([^0-9]*>\)/\1\2/g для подстановки. Если | может уже произойти на входе, вы можете избежать их, используя _u схему: _ -> _u , | -> _p который вы отмените позже.

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