フラグは、予想とは逆の方法で連携します。 /e
のドキュメント 記録のために:
このコマンドを使用すると、シェル コマンドからの入力をパターン スペースにパイプできます。置換が行われた場合、パターン空間で見つかったコマンドが実行され、パターン空間がその出力に置き換えられます。末尾の改行は抑制されます。実行するコマンドにヌル文字が含まれている場合、結果は未定義です。これは GNU sed 拡張です。
それは少し曲がりくねって書かれています。つまり、s///
の完了後、 変更があった場合、(新しい) 行がコマンドとして実行され、その出力がこの行の置換として使用されます。
与えられたコマンドについて:
echo AAA | sed -r 's/A/echo B/ge'
最初に各 A
を置き換えます echo B
で 、そしてそれから 結果をコマンドとして実行します。これは (大まかに言えば) 以下と同じ効果があります:
echo AAA | sed -r 's/A/echo B/g' | sh
GNU sed
必要に応じて、より複雑なスクリプトで偽装できますが、必要なモードを直接サポートしていません。または、Perl の /e
s
への修飾子 コマンドには、探している動作がありますが、代わりに Perl 式が使用されています。
あなたは 複数の置換を取得しますが、複数の実行は取得しません。すべての置換が行われると、パターンが実行されます。
e
なし
echo AAA | sed -r 's/A/echo B/g'
です
echo Becho Becho B
これが、実行した場合に実行されるコマンド ラインです。 e
を含める
echo 'Becho Becho B'
GNU sed の 's' コマンドに 'e' フラグを付けて使用して 'AAA' から 'BBB' を取得するには、次のようにします:
echo AAA | sed -re 's/A/echo -n B;/ge'
「AAA」は「echo -n B;echo -n B;」に置き換えられます。 echo -n B;' は、最終的に実行されると、グローバル マッチごとに 1 つずつ、3 つの連続して実行される echo コマンドにつながります。 「-n」は、echo の出力から改行文字を省略し、「B」を 1 行にまとめます (ただし、sed は、最終的にパターン スペースを出力するときに、1 つの改行を単独で追加します)。