正規表現のRHSがそのプログラムの出力と等しくsed
なるように、キャプチャグループを別のプログラムにパイプする方法はありますか?\1
たとえば、次のようにします。
sed 's/lorem ipsum \(foobar\)/\1/g' file.txt
「foobar」を別のプログラム(例えば)を介しtr 'o' 'a'
て「faabar」にリンクして、「lorem ipsum foobar」を「lorem ipsum faabar」に置き換えますか?\1
sed
これは単純な例です。 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