「sed」内でコマンドを実行する

「sed」内でコマンドを実行する

テキストファイルに保存されている任意のメモリアドレスのリストがあり、それを取り出してsedデコードしてから再度ファイルに保存する必要があります。しかし、私がやろうとしているデコードは、私がしばらく前に作成したC ++プログラムで処理されます。今経験している問題は、sedコマンドでC ++を実行することです。つまり、デコードする必要がある部分を逆参照して、C++ プログラムでパラメータとして使用したいのです。私は次のコマンドを書きました。

cat $1 | sed -r 's/(0[Xx])([0-9A-Za-z]{1,8})/\1`./convAddrs \2`/g';

私が答えを読む機会を持つ前にこれ投稿にはsedコマンドが実行されないと言いました。実際にsedコマンドを実行することは許可されていませんか?もしそうなら、私が書いたコマンドが有効なシーケンスであると仮定するsedと、どのように書きますかperl

ベストアンサー1

perl -pe 's|(?<=0x)[0-9a-f]{1,8}|`./convAddrs $&`|gei'
  • perl -pe:Like sed:で一度に1行ずつ入力を処理し$_、各行に渡されたperl [e]式を評価し-e、[p]各行の修正を印刷します$_
  • s|X|Y|gei:replace Yin X$_[g]グローバル、大文字と小文字を区別しない[i]、Yデフォルトの文字列ではなくperl [e]式として扱われます)。
  • (?<=0x):後ろを見てください0x
  • [0-9a-f]{1,8}:16進数1〜8桁、できるだけ多く
  • `./convAddrs $&`:シェルコマンドラインの出力を$&一致する部分に置き換えます。

おすすめ記事