文字列が一致した場合、このsedは実行されませんか?

文字列が一致した場合、このsedは実行されませんか?

sedラベル内の数字を削除するコマンドは次のとおりです。

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

しかし、特定の文字列を除外する方法を知っている人はいますか?

これで、次のように表示されます。以下を入力してください。

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

そして出力:

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

ただし、パスワード2などの特定の文字列を除外できるようにしたい場合、出力は次のようになります。

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

答え1

ファイルを前処理して、ホワイトリストに追加したい文字列に特殊文字を挿入して、文字列が置き換えられるのを防ぎます。

あなたが変更したように:

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

到着

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

まずs/\(<[^|0-9>]*\)[0-9]*\([^0-9]*>\)/\1\2/g交換のため。可能であれば、|入力にすでに存在する場合は_-> _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'

関連情報