私は正規表現があまり得意ではないので、検索する必要があります
<
/>
任意の単語とrepace<anyword></anyword>
<book/>
したい<book></book>
正規表現を使用してXMLを解析しようとしているようですが、これは通常は悪い考えです— XMLは当初の見た目よりもはるかに複雑です(置き換えが必要な場合はどうなります<a b="c"/>
か<a b="c"></a>
?非ASCII要素名はどうなりますか?)—しかし、あなたが説明したことがまさにあなたが必要としているものであると確信しているなら、あなたは次のように書くことができます:
perl -pe 's{<(\w+)/>}{<$1></$1>}g' < input_file > output_file
また:
sed 's|<\([^[:space:]][^[:space:]]*\)/>|<\1></\1>|g' < input_file > output_file
使用する
sed -i 's|<\([[:alpha:]][[:alpha:]]*\)/>|<\1></\1>|g' $input_file
ファイルをインラインで変更します(これ-i
が目的です)。注意:これ-i
はGNU拡張機能です。
POSIXに準拠し、ファイルをインラインで編集するには(* IXシステムの場合)、次を使用します。
echo '/<[[:alpha:]][[:alpha:]]*\/>/g\
s/<\([[:alpha:]][[:alpha:]]*\)\/>/<\1><\/\1>/g
wq' | ed $input_file
タグに一致する正規表現は次のようになります。
<(\w+)/>
キャプチャグループを使用すると、次のような新しいタグを作成できます。
<\1></\1>
これはあなたのために働くかもしれません:
echo '<book/>' | sed 's|<\([^/]*\)/>|<\1></\1>|'
<book></book>