以下を含むファイルがあります。
<class>
these are special @ $ characters / < > & " '
</class>
。間にある特殊文字をすべて削除したいと思います<class> </class>
。
このコマンドを試しました。
sed "s/[^a-zA-Z0-9(<.class>)(<\/class>)/ /g" file.txt
上記のコマンドでは、文字、数字、ラベルを保持しようとしましたが、他のすべての項目は削除する必要があります。
しかし、それは私に望む結果を与えません。
答え1
ブロックが1つだけで、class
各ラベルが別々の行にあると仮定すると、GNU awkは次のように動作します。
awk '/<\/class>/{p=0};p{gsub(/[^A-Za-z0-9]/," ")};/<class>/{p=1};1' file.txt
答え2
以下のコマンドでテストを完了し、以下のコマンドを使用して正しく機能しました。間にあるすべての特殊文字をsed
削除しました。[<>&$@/'"]
<class> and </class>
入力.txt
<class>
these are special @ $ characters / < > & " '
</class>
注文する
sed -n '/<class>/,/<\/class>/p' input.txt | sed '/^[a-z]/s/[<>&$@/]//g' | sed "s/'//g" | sed 's/"//g'
出力
<class>
these are special characters
</class>