sedを使って次のテキストを変更したいと思います。
(3)www(5)first(3)nth(6)domain(3)com(0)
到着する:
www.first.nth.domain.com
2〜n + 3個のグループ(無限大)があると仮定すると、角かっこ区切り記号の間の各グループをキャプチャし、ピリオド区切り順に再構成できますか?別の方法がありますか?
私はすでに次のことに慣れています。
s/\(\d+\)/./g
しかし、これはただ次のものを生成します:
.www.first.nth.domain.com.
答え1
これはあなたの要件を満たすようです。実行の長さを確認するために括弧内の数字を使用するかどうかはわかりませんが、そうではないとします。
echo '(3)www(5)first(3)nth(6)domain(3)com(0)' |
sed -r -e 's/^\([0-9]+\)//' -e 's/(.)\([0-9]+\)(.)/\1.\2/g' -e 's/\([0-9]+\)$//'
www.first.nth.domain.com
sed
3つの異なるREが使用されます。最初と最後は、境界付きの先行式と末尾の(\d+)
式を削除します。中央部分は残りの部分を剥がした。
答え2
どうですかs/\([0-9]+\)/./g; s/^\.|\.$//g
?
\d
いくつかの sed 実装は、あなたの設定を認識しません。上記はPosix拡張正規表現です。ご存知のように、しなければならない働く
秘訣はsed
段階的に行うことです。角かっこ内の数字を変更すると、ほとんどの操作が完了します。 2番目の正規表現を使用して結果をクリーンアップできることに気づいていませんでした。