交換する前に、外部プログラムを介してsedキャプチャグループをパイプしますか?

交換する前に、外部プログラムを介してsedキャプチャグループをパイプしますか?

正規表現のRHSがそのプログラムの出力と等しくsedなるように、キャプチャグループを別のプログラムにパイプする方法はありますか?\1

たとえば、次のようにします。

sed 's/lorem ipsum \(foobar\)/\1/g' file.txt

「foobar」を別のプログラム(例えば)を介しtr 'o' 'a'て「faabar」にリンクして、「lorem ipsum foobar」を「lorem ipsum faabar」に置き換えますか?\1sed

これは単純な例です。 tr.

ベストアンサー1

e(実行)修飾子を使用してGNU sedを使用できます。

eこの
コマンドを使用すると、シェルコマンドの入力をパターンスペースにパイプできます。置換が行われると、パターン空間内のコマンドが実行され、その出力がパターン空間を置き換えます。末尾の改行は抑制されます。実行するコマンドに NUL 文字が含まれている場合、結果は定義されません。これはGNU sed拡張です。

源泉)

しかし、指定されたキャプチャグループではなく、全パターン空間を実行して置換するため、ユーザビリティが制限される。だからあなたはかなり醜いバスケットボールを飛び越えなければなりません。

前任者。

$ echo 'lorem ipsum foobar' | sed '
    s/\(lorem ipsum \)\(foobar\)/printf "%s%s" "\1" "$(echo "\2" | tr o a)"/e
  '
lorem ipsum faabar

おすすめ記事