sedを使用して特定の正規表現抽出コマンドをその出力に置き換えることはできますか?
たとえば、次のファイルがあります。
2 + 2 = $$shell:echo 2 + 2 | bc$$ // and "some unescaped text' here
どのように変換しますか?
2 + 2 = 4 // and "some unescaped text' here
コマンドを抽出して評価できることがわかりました。
echo '2 + 2 = $$shell:echo 2 + 2 | bc$$ // and "some unescaped text' here | sed -e 's/.*\$\$shell:\(.*\)\$\$.*/\1/e'
4
しかし、残りの行を維持する方法を理解していません。
ベストアンサー1
パールを使用できます...
perl -pe 's[\$\$shell:(.*?)\$\$][ qx($1) =~ s/\n$//r ]ge' < inputfile
(qx
末尾の改行を削除しないため、後続の改行が削除されることを除いて、コマンドの置換=~ s/\n$//r
と同じです。周囲の内容は、s[][]ge
Perl式を置換で使用する一般的な置換のみです。)