私はこれを試しました
sed -i '' 's/[0-9]*<>/g'
しかし、それはうまくいきませんでした。
サンプルファイル:
<Number1>
</Number8>
出力:
<Number>
</Number>
ベストアンサー1
実際にやってみると本当に簡単ですsed
。一度にできるだけ多くを取得し、再びt
ry、t
ryを実行します。
sed -e :t -e 's/\(<[^<]*\)[0-9]\{1,\}\([^>]*>\)/\1\2/g;tt'
次のランダム入力ビットを試してみました。
<Number1>
234234 </Nu994845mb6er8>'
234234 <000000000000000000000000000000000000>>
<a1> 2 <34b5c> 6 7 def
結果:
<Number>
234234 </Number>
234234 <>>
<a> 2 <bc> 6 7 def
<
正規表現は、aとaの間の1つ以上の数字に一致します>
。正常に実行できなくなるまで、一連の数字を別のものに置き換えます。これがestコマンドの目的ですt
。
そうでなければできますいいえ次のループ:
sed 's/^/>/;s/\(>[^<>]*\)*[0-9]*/\1/g;s/.//' <<\INPUT
<Number1>
234234 </Nu994845mb6er8>'
234234 <000000000000000000000000000000000000>>
<a1> 2 <34b5c> 6 7 def
INPUT
出力
<Number>
234234 </Number>'
234234 <>>
<a> 2 <bc> 6 7 def
>
見つかるまで常に1つはスキップされるため、グループ<
にのみ影響します<[^<>]*>
。バラよりこれ興味があれば理由を知りたいです。