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 / / /コマンドなど)。