sed 置換にコマンドを使用する

sed 置換にコマンドを使用する

sedを使用して同じ文字シーケンスをそのシーケンスの文字数に置き換えようとしましたが、何か問題が発生しました。

私は以下を試しています:

echo aaabbdd | sed -e 's/a*/'"`wc -m &`/"

しかし、これが返され、0bbdd私はそれが返されたいと思います3bbdd

何が起きているのか本当に分からない。 sedは何を置き換えるべきかを知り、wcコマンドを実行しようとしますが、何とかwcが空であると計算されますか?この問題を解決する方法がわかりません。誰でも助けることができますか?

ありがとうございます!

答え1

あなたが達成したいことは実際には可能ですが、GNU sedを介してのみ可能です。金利注文する。したがって、移植性の問題が気に入らない場合は、試してみることができます。

たとえば、あなたの例は次のとおりです。

>echo aaabbdd | sed -e 's/a*/echo `echo -n & | wc -m`/;e'
3bbdd

削除すると;金利、中間コマンドが表示されます(2つのエコーがある理由を理解するのに役立ちます)。

echo `echo -n aaa | wc -m`bbdd

複数の一致を交換する場合は、これはより難しいかもしれませんが、交換項目をリンクすることで行うことができます。

>echo aabbaadd | sed -re 's/a+/`echo -n &|wc -m`/g;s/.*/echo &/;e'
2bb2dd

もちろん、次のように作業に優れたツールがあります。アッ、組み込み機能長さ()機能。

引用:

ポリスチレン

また、入力データに引用符が含まれている場合は、慎重にエスケープするか一時的に置き換える必要があります(sed y / / /コマンドなど)。

関連情報